diff --git a/gcompris.appdata.xml b/gcompris.appdata.xml index 74926ef21..ff2e56e50 100644 --- a/gcompris.appdata.xml +++ b/gcompris.appdata.xml @@ -1,545 +1,600 @@ gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop + gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop gcompris.desktop xxgcompris.desktopxx gcompris.desktop gcompris.desktop CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 + CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 CC0-1.0 xxCC0-1.0xx CC0-1.0 CC0-1.0 GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ + GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ GPL-3.0+ xxGPL-3.0+xx GPL-3.0+ GPL-3.0+ GCompris Educational Game Joc educatiu GCompris GCompris-Lernspiel GCompris Educational Game Juego educativo GCompris + Jeu éducatif GCompris Xogo educativo GCompris Gioco didattico GCompris Educatief spel GCompris GCompris leik-og-lær-spel Gra edukacyjna GCompris Jogo Educativo GCompris Jogo educacional GCompris Výuková hra GCompris Izobraževalna igra GCompris GCompris pedagogiskt spel Освітня гра GCompris xxGCompris Educational Gamexx GCompris 教育游戏 GCompris 教育遊戲 Multi-Activity Educational game for children 2 to 10 Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys Lernspiel mit vielen Aktivitäten für Kinder von 2 bis 10 Jahren Multi-Activity Educational game for children 2 to 10 Juego educativo multiactividad para niños de 2 a 10 años + Jeu éducatif multi-activités pour les enfants de 2 à 10 ans Xogo educativo con varias actividades para nenos de entre 2 e 10 anos. Gioco didattico multi-attività per bambini da 2 a 10 anni Educatief spel met meerdere activiteiten voor kinderen van 2 tot 10 Leik-og-lærspel med mange aktivitetar – for barn frå 2 til 10 år Gra edukacyjna z wieloma aktywnościami dla dzieci w wieku od 2 do 10 lat Jogo Educativo Multi-Actividades para crianças dos 2 aos 10 anos Jogo educacional multi-atividade para crianças de 2 a 10 anos Viac-aktivitová výuková hra pre deti od 2 do 10 rokov Izobraževalna igra z več dejavnostmi za otroke med drugim in desetim letom starosti Pedagogiskt multiaktivitetsspel för barn från 2 till 10 år Набір освітніх ігор для дітей від 2 до 10 років xxMulti-Activity Educational game for children 2 to 10xx 为 2 到 10 岁儿童准备的多功能教育游戏 為 2-10 歲孩子設計的教育遊戲

GCompris is an educational software suite comprising of numerous activities for children aged 2 to 10.

El GCompris és una suite de programari educatiu que consisteix de nombroses activitats per a nens i nenes entre els 2 i els 10 anys.

GCompris ist eine Lernsoftware, die verschiedene Aktivitäten für Kinder im Alter von 2 bis 10 Jahren anbietet.

GCompris is an educational software suite comprising of numerous activities for children aged 2 to 10.

+

GCompris es una suite de software educativo que consta de numerosas actividades para niños de 2 a 10 años.

+

GCompris est une suite éducative comprenant de nombreuses activités pour les enfants de 2 à 10 ans.

GCompris é unha colección de programas educativos composta por numerosas actividades para nenos de entre 2 e 10 anos.

GCompris è una raccolta di programmi didattici che comprende numerose attività per bambini da 2 a 10 anni.

GCompris is suite met educatieve software die bestaat uit vele activiteiten voor kinderen vanaf twee tot tien jaar.

GCompris er eit leik-og-lær spel med mange ulike aktivitetar, laga for ungar frå 2 til 10 år.

GCompris to pakiet oprogramowania edukacyjnego z licznymi aktywnościami dla dzieci w wieku od 2 do 10 lat.

O GCompris é um pacote de aplicações educativas que é composto por diversas actividades para as crianças dos 2 aos 10 anos de idade.

GCompris é uma suíte de software educacional que compreende numerosas atividades para crianças com idade entre 2 e 10.

Program GCompris je visokokakovostna zbirka izobraževalnih dejavnosti, namenjenih otrokom med drugim in desetim letom starosti.

GCompris är en pedagogisk programsvit som består av en mängd olika aktiviteter för barn från 2 till 10 år gamla.

GCompris — комплекс навчального програмного забезпечення, що складається з багатьох вправ для дітей від 2 до 10 років.

xxGCompris is an educational software suite comprising of numerous activities for children aged 2 to 10.xx

GCompris 是一款教育套件,由针对 2 到 10 岁孩子的许多活动组成。

GCompris 是一套教育軟體的集合,它提供適合兩歲到十歲兒童各種不同的活動。

Some of the activities are game orientated, but nonetheless still educational.

Algunes de les activitats estan orientades a joc, però sempre són educatives.

Některé aktivity jsou v podobě her, ale přesto jsou poučné.

Einige Aktivitäten sind eher spielerisch, aber immer lehrreich.

Some of the activities are game orientated, but nonetheless still educational.

+

Algunas de las actividades son juegos, aunque siguen siendo educativas.

+

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.

Alcune delle attività sono orientate al gioco, ma comunque didattiche.

Sommige activiteiten zijn spelletjes, maar toch leerzaam.

Nokre av aktivitetane er mest som spel, men er likevel lærerike.

Niektóre z aktywności są bardziej grą, lecz nadal bardzo pouczającą.

Algumas das actividades são apresentadas como jogos, mas são educativas à mesma.

Algumas das atividades são de orientação lúdica, mas mesmo assim ainda educacional.

Nekatere dejavnosti so bolj podobne igram, vendar še vedno poučne.

Vissa av aktiviteterna är spelorienterade, men trots det ändå pedagogiska.

Деякі із вправ є суто ігровими, але містять і елементи навчання.

xxSome of the activities are game orientated, but nonetheless still educational.xx

一些活动是游戏导向的,不过尽管如此仍是教育性的。

有些活動是遊戲性質,但還是有很棒的教育意義。

Below you can find a list of categories with some of the activities available in that category.

A continuació trobareu una llista de les categories amb algunes de les activitats disponibles en cadascuna.

Sie können Aktivitäten aus folgenden Bereichen in GCompris finden:

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.

+

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 mailas actividades dispoñíbeis en cada unha desas categorías.

Di seguito puoi trovare un elenco di categorie con alcune delle attività disponibili per categoria.

Hieronder vindt u een lijst met categorieën met enige van de activiteiten beschikbaar in die categorie.

Nedanfor finn du ei oversikt over kategoriar, saman med nokre av aktivitetane i kvar kategori.

Poniżej znajdziesz wykaz kategorii z niektórymi aktywnościami dostępnymi w tej kategorii.

Em baixo, poderá encontrar uma lista de categorias, com algumas das actividades disponíveis para essa categoria.

Spodaj lahko najdete seznam kategorij in nekaj dejavnosti, ki so na voljo v tisti kategoriji.

Nedan finns en lista över kategorier med några av aktiviteterna tillgängliga i varje kategori.

Нижче наведено список категорій із деякими вправами у цих категоріях.

xxBelow you can find a list of categories with some of the activities available in that category.xx

下方您可以看到該類別的活動清單。

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.

Actualment el GCompris ofereix més de 100 activitats i encara se'n desenvolupen més. El GCompris és programari lliure, el qual vol dir que podeu adaptar-lo a les vostres pròpies necessitats, millorar-lo i, el més important, compartir-lo amb nens de tot arreu.

Insgesamt beinhaltet GCompris mehr als 100 Aktivitäten und wird ständig weiterentwickelt. GCompris ist freie Software. Sie haben also die Möglichkeit, sie ihren Bedürfnissen anzupassen und zu verbessern, und gerne auch alle Kinder der Welt von Ihrer Arbeit profitieren zu lassen.

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.

+

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 progreso. 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.

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.

Op dit moment biedt GCompris meer dan 100 activiteiten en meer zijn er in ontwikkeling. GCompris is vrije software, dat betekent dat u het kunt aanpassen aan uw eigen behoeften, het verbeteren en, meest belangrijk, het met kinderen overal kun delen.

GCompris har over 100 aktivitetar, og fleire vert utvikla. GCompris er fri programvare. Det vil seia at du kan tilpassa spelet slik du ønskjer, forbetra det og dela det med andre ungar i heile verda.

Obecnie GCompris zapewnia ponad 100 aktywności, a jeszcze więcej jest opracowywanych. GCompris jest darmowym oprogramowaniem, co oznacza, że możesz je dopasować do własnych potrzeb, ulepszać je i co najważniejsze udostępniać je dzieciom.

De momento, o GCompris oferece mais de 100 actividades, estando ainda mais em desenvolvimento. O GCompris é uma aplicação de 'software' livre, o que significa que o poderá adaptar às suas próprias necessidades, melhorá-lo e, o mais importante, partilhá-lo com as crianças em todo o lado.

GCompris trenutno ponuja več kot 100 dejavnosti, še več pa jih je v razvoju. GCompris je prosta programska oprema, kar pomeni, da jo lahko prilagodite po svoje, še pomembneje pa je, da jo lahko delite z otroki širom sveta.

För närvarande erbjuder GCompris över 100 aktiviteter och ännu fler håller på att utvecklas. GCompris är fri programvara, vilket betyder att man kan anpassa det till sina egna behov, och viktigast av allt, dela det med barn överallt.

У поточній версії GCompris понад 100 вправ. Розробники постійно працюють над новими вправами. GCompris є вільним програмним забезпеченням, це означає, що ви можете адаптувати програму до власних потреб, покращувати її і, що найважливіше, ділитися вашими творіннями із усіма дітьми.

xxCurrently 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.xx

目前 GCompris 提供超過 100 個活動,還有更多正在開發中。GCompris 是一套自由軟體,表示您可以根據您自己的需求來改進,並分享給所有的孩子們。

http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png + http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png + http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png xxhttp://gcompris.net/screenshots-qt/middle/canal_lock.pngxx http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/canal_lock.png http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ + http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ + http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ xxhttp://gcompris.net/screenshots-qt/middle/xx http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/ http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png + http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png + http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png xxhttp://gcompris.net/screenshots-qt/middle/click_on_letter_up.pngxx http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/click_on_letter_up.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png + http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png + http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png xxhttp://gcompris.net/screenshots-qt/middle/clockgame.pngxx http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/clockgame.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png + http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png + http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png xxhttp://gcompris.net/screenshots-qt/middle/color_mix.pngxx http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/color_mix.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png + http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png + http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png xxhttp://gcompris.net/screenshots-qt/middle/colors.pngxx http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/colors.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png + http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png + http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png xxhttp://gcompris.net/screenshots-qt/middle/enumerate.pngxx http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/enumerate.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png + http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png + http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png xxhttp://gcompris.net/screenshots-qt/middle/fifteen.pngxx http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/fifteen.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png + http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png + http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png xxhttp://gcompris.net/screenshots-qt/middle/hexagon.pngxx http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/hexagon.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png + http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png + http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png xxhttp://gcompris.net/screenshots-qt/middle/redraw_symmetrical.pngxx http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/redraw_symmetrical.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png + http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png + http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png xxhttp://gcompris.net/screenshots-qt/middle/scalesboard.pngxx http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/scalesboard.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png + http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png + http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png xxhttp://gcompris.net/screenshots-qt/middle/traffic.pngxx http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/screenshots-qt/middle/traffic.png http://gcompris.net/ http://gcompris.net/ + http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ + http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ http://gcompris.net/ xxhttp://gcompris.net/xx http://gcompris.net/ http://gcompris.net/ https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris + https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris + https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris xxhttps://bugs.kde.org/enter_bug.cgi?format=guided&product=gcomprisxx https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris https://bugs.kde.org/enter_bug.cgi?format=guided&product=gcompris bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net + bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net + bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net xxbruno.coudoin@gcompris.netxx bruno.coudoin@gcompris.net bruno.coudoin@gcompris.net
diff --git a/org.kde.gcompris.desktop b/org.kde.gcompris.desktop index 4ca3483f6..06da9dcd6 100644 --- a/org.kde.gcompris.desktop +++ b/org.kde.gcompris.desktop @@ -1,71 +1,74 @@ [Desktop Entry] Encoding=UTF-8 Name=GCompris Educational Game Name[ca]=Joc educatiu GCompris Name[cs]=Výuková hra GCompris Name[de]=GCompris-Lernspiel Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris +Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris Name[it]=Gioco didattico GCompris Name[nl]=Educatief spel GCompris Name[nn]=GCompris leik-og-lær-spel Name[pl]=Gra edukacyjna GCompris Name[pt]=Jogo Educativo GCompris Name[pt_BR]=Jogo educacional GCompris Name[ro]=Joc educațional GCompris Name[sk]=Výuková hra GCompris Name[sl]=Izobraževalna igra GCompris Name[sv]=GCompris pedagogiskt spel Name[uk]=Освітня гра GCompris Name[x-test]=xxGCompris Educational Gamexx Name[zh_CN]=GCompris 教育游戏 Name[zh_TW]=GCompris 教育遊戲 GenericName=Educational game GenericName[ca]=Joc educatiu GenericName[cs]=Výuková hra GenericName[de]=Lernspiel GenericName[en_GB]=Educational game GenericName[es]=Juego educativo +GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo GenericName[it]=Gioco didattico GenericName[nl]=Educatief spel GenericName[nn]=Leik-og-lær-spel GenericName[pl]=Gra edukacyjna GenericName[pt]=Jogo educativo GenericName[pt_BR]=Jogo educacional GenericName[ro]=Joc educațional GenericName[sk]=Výuková hra GenericName[sl]=Izobraževalna igra GenericName[sv]=Pedagogiskt spel GenericName[uk]=Освітня гра GenericName[x-test]=xxEducational gamexx GenericName[zh_CN]=教育游戏 GenericName[zh_TW]=教育遊戲 Comment=Multi-Activity Educational game for children 2 to 10 Comment[ca]=Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys Comment[de]=Lernspiel mit vielen Aktivitäten für Kinder von 2 bis 10 Jahren 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[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. Comment[it]=Gioco didattico multi-attività per bambini da 2 a 10 anni Comment[nl]=Educatief spel met meerdere activiteiten voor kinderen van 2 tot 10 Comment[nn]=Leik-og-lærspel med mange aktivitetar – for barn frå 2 til 10 år Comment[pl]=Gra edukacyjna z wieloma aktywnościami dla dzieci w wieku od 2 do 10 lat Comment[pt]=Jogo educativo multi-actividades para crianças dos 2 aos 10 anos Comment[pt_BR]=Jogo educacional multi-atividade para crianças de 2 a 10 anos Comment[ro]=Joc educațional cu multe activități pentru copii de la 2 la 10 ani Comment[sk]=Viac-aktivitová výuková hra pre deti od 2 do 10 rokov Comment[sl]=Izobraževalna igra z več dejavnostmi za otroke med drugim in desetim letom starosti Comment[sv]=Pedagogiskt multiaktivitetsspel för barn från 2 till 10 år Comment[uk]=Набір освітніх ігор для дітей від 2 до 10 років Comment[x-test]=xxMulti-Activity Educational game for children 2 to 10xx Comment[zh_CN]=为 2 到 10 岁儿童准备的多功能教育游戏 Comment[zh_TW]=為 2-10 歲孩子設計的教育遊戲 Exec=gcompris-qt Icon=gcompris-qt Terminal=false Type=Application Categories=Education;Game;KidsGame; StartupNotify=true X-DocPath=gcompris/index.html diff --git a/platforms/sailfishOS/harbour-gcompris-qt.desktop b/platforms/sailfishOS/harbour-gcompris-qt.desktop index 9b3faba7a..bb15b3bb5 100644 --- a/platforms/sailfishOS/harbour-gcompris-qt.desktop +++ b/platforms/sailfishOS/harbour-gcompris-qt.desktop @@ -1,71 +1,74 @@ [Desktop Entry] Encoding=UTF-8 Name=GCompris Educational Game Name[ca]=Joc educatiu GCompris Name[cs]=Výuková hra GCompris Name[de]=GCompris-Lernspiel Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris +Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris Name[it]=Gioco didattico GCompris Name[nl]=Educatief spel GCompris Name[nn]=GCompris leik-og-lær-spel Name[pl]=Gra edukacyjna GCompris Name[pt]=Jogo Educativo GCompris Name[pt_BR]=Jogo educacional GCompris Name[ro]=Joc educațional GCompris Name[sk]=Výuková hra GCompris Name[sl]=Izobraževalna igra GCompris Name[sv]=GCompris pedagogiskt spel Name[uk]=Освітня гра GCompris Name[x-test]=xxGCompris Educational Gamexx Name[zh_CN]=GCompris 教育游戏 Name[zh_TW]=GCompris 教育遊戲 GenericName=Educational game GenericName[ca]=Joc educatiu GenericName[cs]=Výuková hra GenericName[de]=Lernspiel GenericName[en_GB]=Educational game GenericName[es]=Juego educativo +GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo GenericName[it]=Gioco didattico GenericName[nl]=Educatief spel GenericName[nn]=Leik-og-lær-spel GenericName[pl]=Gra edukacyjna GenericName[pt]=Jogo educativo GenericName[pt_BR]=Jogo educacional GenericName[ro]=Joc educațional GenericName[sk]=Výuková hra GenericName[sl]=Izobraževalna igra GenericName[sv]=Pedagogiskt spel GenericName[uk]=Освітня гра GenericName[x-test]=xxEducational gamexx GenericName[zh_CN]=教育游戏 GenericName[zh_TW]=教育遊戲 Comment=Multi-Activity Educational game for children 2 to 10 Comment[ca]=Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys Comment[de]=Lernspiel mit vielen Aktivitäten für Kinder von 2 bis 10 Jahren 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[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. Comment[it]=Gioco didattico multi-attività per bambini da 2 a 10 anni Comment[nl]=Educatief spel met meerdere activiteiten voor kinderen van 2 tot 10 Comment[nn]=Leik-og-lærspel med mange aktivitetar – for barn frå 2 til 10 år Comment[pl]=Gra edukacyjna z wieloma aktywnościami dla dzieci w wieku od 2 do 10 lat Comment[pt]=Jogo educativo multi-actividades para crianças dos 2 aos 10 anos Comment[pt_BR]=Jogo educacional multi-atividade para crianças de 2 a 10 anos Comment[ro]=Joc educațional cu multe activități pentru copii de la 2 la 10 ani Comment[sk]=Viac-aktivitová výuková hra pre deti od 2 do 10 rokov Comment[sl]=Izobraževalna igra z več dejavnostmi za otroke med drugim in desetim letom starosti Comment[sv]=Pedagogiskt multiaktivitetsspel för barn från 2 till 10 år Comment[uk]=Набір освітніх ігор для дітей від 2 до 10 років Comment[x-test]=xxMulti-Activity Educational game for children 2 to 10xx Comment[zh_CN]=为 2 到 10 岁儿童准备的多功能教育游戏 Comment[zh_TW]=為 2-10 歲孩子設計的教育遊戲 Exec=harbour-gcompris-qt Icon=harbour-gcompris-qt Terminal=false Type=Application Categories=Education;Game;KidsGame; StartupNotify=true X-Nemo-Application-Type=generic diff --git a/src/activities/babymatch/DragListItem.qml b/src/activities/babymatch/DragListItem.qml index ee794e1fa..6e5119101 100644 --- a/src/activities/babymatch/DragListItem.qml +++ b/src/activities/babymatch/DragListItem.qml @@ -1,271 +1,270 @@ /* gcompris - DragListItem.qml Copyright (C) 2003, 2014: Bruno Coudoin: initial version 2015: Pulkit Gupta: Qt 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.1 -import QtQuick.Controls 1.1 import QtGraphicalEffects 1.0 import GCompris 1.0 import "babymatch.js" as Activity Item { id: item width: tile.width height: tile.height property double heightInColumn property double widthInColumn property double tileWidth property double tileHeight property string imageName: imgName property alias tileImageGlow: tileImageGlow property QtObject answer: tileImage.parent property bool isInList: tileImage.parent == tile ParallelAnimation { id: tileImageAnimation NumberAnimation { target: tileImage easing.type: Easing.OutQuad property: "x" to: tileImage.moveImageX duration: 430 } NumberAnimation { target: tileImage easing.type: Easing.OutQuad property: "y" to: tileImage.moveImageY duration: 430 } onStarted: { tileImage.anchors.centerIn = undefined if(view.showGlow) view.showGlow = false } onStopped: { tileImage.parent = tileImage.tileImageParent tileImage.anchors.centerIn = tileImage.parent view.itemsDropped = view.itemsDropped + tileImage.dropNo if(view.itemsDropped == mymodel.count) { showOk.start() view.okShowed = true } else if(view.okShowed) { hideOk.start() view.okShowed = false } if(!view.okShowed && tileImage.dropNo == 1) view.checkDisplayedGroup() if(!view.okShowed && tileImage.dropNo == -1) { view.displayedGroup[parseInt(index/view.nbItemsByGroup)] = true view.setPreviousNavigation() view.setNextNavigation() } } } Rectangle { id: tile width: tileWidth height: tileHeight color: "transparent" border.color: "transparent" border.width: 2 radius: 2 property double xCenter: tile.x + tile.width/2 property double yCenter: tile.y + tile.height/2 property bool colorChange: true Image { id: tileImage anchors.centerIn: parent height: Activity.glowEnabled ? heightInColumn * 1.1 : heightInColumn width: Activity.glowEnabled ? widthInColumn * 1.1 : widthInColumn fillMode: Image.PreserveAspectFit source: Activity.url + imgName property QtObject dragTarget property QtObject tileImageParent property double moveImageX property double moveImageY property int dropNo property bool dropping: false function imageRemove() { if(backgroundImage.source == "") leftContainer.z = 1 tileImage.state = "INITIAL" var coord = tileImage.parent.mapFromItem(tile, tile.xCenter - tileImage.width/2, tile.yCenter - tileImage.height/2) tileImage.moveImageX = coord.x tileImage.moveImageY = coord.y tileImage.tileImageParent = tile tileImage.dragTarget = null tile.colorChange = true if(tileImage.parent != tile) tileImage.dropNo = -1 else tileImage.dropNo = 0 tileImageAnimation.start() } MouseArea { id: mouseArea width: parent.width; height: parent.height anchors.fill: parent drag.target: parent hoverEnabled: true onEntered: { if(tile.colorChange) { tile.color = "#FF294D" tile.border.color = "white" } if(toolTipText != "") { toolTip.text = toolTipText toolTip.visible = true } } onExited: { if(!pressed) { tile.color = "transparent" tile.border.color = "transparent" toolTip.visible = false } } onPressed: { if(tileImage.parent == tile) leftContainer.z = 3 else leftContainer.z = 1 //activity.audioEffects.stop() //activity.audioEffects.play(pressSound) tileImage.anchors.centerIn = undefined if (tileImage.dragTarget != null) { tileImage.dragTarget.parent.dropCircleColor = "pink" tileImage.dragTarget.dragSource = null } } onReleased: { tile.color = "transparent" tile.border.color = "transparent" //activity.audioEffects.stop() //activity.audioEffects.play("qrc:/gcompris/src/activities/babymatch/resource/sound/drop.wav") if(tileImage.Drag.target === null) tileImage.imageRemove() else { tileImage.dragTarget = tileImage.Drag.target tileImage.state = "DROPPED" tile.colorChange = false tileImage.dropping = true var coord = tileImage.parent.mapFromItem(backgroundImage, tileImage.Drag.target.xCenter - tileImage.width/2, tileImage.Drag.target.yCenter - tileImage.height/2) tileImage.moveImageX = coord.x tileImage.moveImageY = coord.y tileImage.Drag.target.dropped(tileImage.Drag) // Emit signal manually if(tileImage.parent == tile) tileImage.dropNo = 1 else tileImage.dropNo = 0 tileImage.tileImageParent = tileImage.Drag.target tileImageAnimation.start() } } } Drag.active: mouseArea.drag.active Drag.hotSpot.x: tileImage.width/2 Drag.hotSpot.y: tileImage.height/2 states: [ State { name: "INITIAL" PropertyChanges { target: tileImage height: Activity.glowEnabled ? heightInColumn * 1.1 : heightInColumn width: Activity.glowEnabled ? widthInColumn * 1.1 : widthInColumn } }, State { name: "DROPPED" PropertyChanges { target: tileImage height: imgHeight ? imgHeight * backgroundImage.height : (backgroundImage.source == "" ? backgroundImage.height * tileImage.sourceSize.height/backgroundImage.height : backgroundImage.height * tileImage.sourceSize.height/backgroundImage.sourceSize.height) width: imgWidth ? imgWidth * backgroundImage.width : (backgroundImage.source == "" ? backgroundImage.width * tileImage.sourceSize.width/backgroundImage.width : backgroundImage.width * tileImage.sourceSize.width/backgroundImage.sourceSize.width) } } ] Image { id: wrongAnswer anchors.centerIn: parent height: heightInColumn * 0.3 width: widthInColumn * 0.3 fillMode: Image.PreserveAspectFit source:"qrc:/gcompris/src/activities/babymatch/resource/error.svg" visible: view.showGlow && tileImageGlow.setColor == "red" } } Glow { id: tileImageBorder parent: tileImage.parent anchors.fill: tileImage radius: 0.7 samples: 2 color: view.showGlow && Activity.glowEnabled ? "black" : "transparent" source: tileImage spread: 1.0 } Glow { id: tileImageGlow property string setColor: "transparent" parent: tileImage.parent anchors.fill: tileImage radius: view.showGlow && Activity.glowEnabled ? 9 : 0 samples: 18 color: view.showGlow && Activity.glowEnabled ? setColor : "transparent" source: tileImage spread: 0.95 } } } diff --git a/src/activities/click_on_letter/resource/levels-ca.json b/src/activities/click_on_letter/resource/levels-ca.json index 2f1cf6eae..06845a57b 100644 --- a/src/activities/click_on_letter/resource/levels-ca.json +++ b/src/activities/click_on_letter/resource/levels-ca.json @@ -1,14 +1,14 @@ [ { "level": 1, "questions": "aeiouy", "answers": "aeiouy" }, { "level": 2, "questions": "aeiouy", "answers": "aeiouycs" }, { "level": 3, "questions": "aeiouy", "answers": "aeiouycksvxz" }, { "level": 4, "questions": "ckpsvxwz", "answers": "ckpsvxwz" }, { "level": 5, "questions": "bfglmnqt", "answers": "bfglmnqt" }, { "level": 6, "questions": "bdgqpnmu", "answers": "bdgqpnmu" }, { "level": 7, "questions": "ilthwvae", "answers": "ilthwvae" }, { "level": 8, "questions": "abcdefgh", "answers": "abcdefgh" }, { "level": 9, "questions": "ijklmnop", "answers": "ijklmnop" }, { "level": 10, "questions": "qrstuvwxyz", "answers": "qrstuvwxyz" }, - { "level": 11, "questions": "bcdfghjklmnpqrstvwxz", "answers": "bcdfghjklmnpqrstvwxz" } - { "level": 11, "questions": "àçéèíïóòúü", "answers": "àçéèíïóòúü" } + { "level": 11, "questions": "bcdfghjklmnpqrstvwxz", "answers": "bcdfghjklmnpqrstvwxz" }, + { "level": 12, "questions": "àçéèíïóòúü", "answers": "àçéèíïóòúü" } ] diff --git a/src/activities/gletters/Gletters.qml b/src/activities/gletters/Gletters.qml index c861991cb..0f0961666 100644 --- a/src/activities/gletters/Gletters.qml +++ b/src/activities/gletters/Gletters.qml @@ -1,273 +1,272 @@ /* GCompris - gletters.qml * * Copyright (C) 2014 Holger Kaelberer * * Authors: * Bruno Coudoin (GTK+ version) * Holger Kaelberer (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.1 -import QtQuick.Controls 1.0 import GCompris 1.0 import "../../core" import "gletters.js" as Activity ActivityBase { id: activity // Overload this in your activity to change it // Put you default-.json files in it property string dataSetUrl: "qrc:/gcompris/src/activities/gletters/resource/" property bool uppercaseOnly: false; // FIXME: this should go in activity settings /* mode of the activity, "letter" (gletters) or "word" (wordsgame):*/ property string mode: "letter" // Override if you want to replace texts by your image function getImage(key) { return "" } // Override if you want to replace texts by the domino function getDominoValues(key) { return [] } onStart: focus = true onStop: {} // When going on configuration, it steals the focus and re set it to the activity. // We need to set it back to the textinput item in order to have key events. onFocusChanged: { if(focus) { Activity.focusTextInput() } } pageComponent: Image { id: background source: activity.dataSetUrl + "background.svg" fillMode: Image.PreserveAspectCrop sourceSize.width: parent.width signal start signal stop // system locale by default property string locale: "system" Component.onCompleted: { dialogActivityConfig.getInitialConfiguration() activity.start.connect(start) activity.stop.connect(stop) } QtObject { id: items property Item main: activity.main property Item ourActivity: activity property GCAudio audioVoices: activity.audioVoices property alias background: background property alias bar: bar property alias bonus: bonus property alias wordlist: wordlist property alias score: score property alias keyboard: keyboard property alias wordDropTimer: wordDropTimer property GCAudio audioEffects: activity.audioEffects property alias locale: background.locale property alias textinput: textinput } onStart: { Activity.start(items, uppercaseOnly, mode); Activity.focusTextInput() } onStop: { Activity.stop() } TextInput { // Helper element to capture composed key events like french ô which // are not available via Keys.onPressed() on linux. Must be // disabled on mobile! id: textinput anchors.centerIn: background enabled: !ApplicationInfo.isMobile focus: true visible: false onTextChanged: { if (text != "") { Activity.processKeyPress(text); text = ""; } } } DialogActivityConfig { id: dialogActivityConfig currentActivity: activity content: Component { Item { property alias localeBox: localeBox height: column.height property alias availableLangs: langs.languages LanguageList { id: langs } Column { id: column spacing: 10 width: parent.width Flow { spacing: 5 width: dialogActivityConfig.width GCComboBox { id: localeBox model: langs.languages background: dialogActivityConfig width: 250 * ApplicationInfo.ratio label: qsTr("Select your locale") } } /* TODO handle this: GCDialogCheckBox { id: uppercaseBox width: 250 * ApplicationInfo.ratio text: qsTr("Uppercase only mode") checked: true onCheckedChanged: { print("uppercase changed") } } */ } } } onClose: home() onLoadData: { if(dataToSave && dataToSave["locale"]) { background.locale = dataToSave["locale"]; } } onSaveData: { var oldLocale = background.locale; var newLocale = dialogActivityConfig.configItem.availableLangs[dialogActivityConfig.loader.item.localeBox.currentIndex].locale; // Remove .UTF-8 if(newLocale.indexOf('.') != -1) { newLocale = newLocale.substring(0, newLocale.indexOf('.')) } dataToSave = {"locale": newLocale} background.locale = newLocale; // Restart the activity with new information if(oldLocale !== newLocale) { background.stop(); background.start(); } } function setDefaultValues() { var localeUtf8 = background.locale; if(background.locale != "system") { localeUtf8 += ".UTF-8"; } for(var i = 0 ; i < dialogActivityConfig.configItem.availableLangs.length ; i ++) { if(dialogActivityConfig.configItem.availableLangs[i].locale === localeUtf8) { dialogActivityConfig.loader.item.localeBox.currentIndex = i; break; } } } } DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar anchors.bottom: keyboard.top content: BarEnumContent { value: help | home | level | config } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() onConfigClicked: { dialogActivityConfig.active = true dialogActivityConfig.setDefaultValues() displayDialog(dialogActivityConfig) } } Bonus { id: bonus Component.onCompleted: win.connect(Activity.nextLevel) } Score { id: score anchors.top: undefined anchors.topMargin: 10 * ApplicationInfo.ratio anchors.right: parent.right anchors.rightMargin: 10 * ApplicationInfo.ratio anchors.bottom: keyboard.top } VirtualKeyboard { id: keyboard anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter width: parent.width onKeypress: Activity.processKeyPress(text) onError: console.log("VirtualKeyboard error: " + msg); } Wordlist { id: wordlist defaultFilename: activity.dataSetUrl + "default-en.json" // To switch between locales: xx_XX stored in configuration and // possibly correct xx if available (ie fr_FR for french but dataset is fr.) useDefault: false filename: "" onError: console.log("Gletters: Wordlist error: " + msg); } Timer { id: wordDropTimer repeat: false onTriggered: Activity.dropWord(); } } } diff --git a/src/activities/gletters/resource/default-ca.json b/src/activities/gletters/resource/default-ca.json index e7736bb45..793159f83 100644 --- a/src/activities/gletters/resource/default-ca.json +++ b/src/activities/gletters/resource/default-ca.json @@ -1,336 +1,336 @@ { "levels" : [ { "level" : "1", "words" : [ "a", "e", "i", "o", "u" ] }, { "level" : "2", "words" : [ "b", "c", "ç", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z" ] }, { "level" : "3", "words" : [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] }, { "level" : "4", "words" : [ "a", "b", "c", "ç", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] }, { "level" : "5", "words" : [ "A", "E", "I", "O", "U" ] }, { "level" : "6", "words" : [ "B", "C", "Ç", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z" ] }, { "level" : "7", "words" : [ "A", "B", "C", "Ç", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ] }, { "level" : "8", "words" : [ "a", "b", "c", "ç", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "Ç", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ] }, { "level" : "9", "words" : [ "a", "à", "ç", "e", "é", "è", "i", "í", "ï", "o", "ó", "ò", "u", "ú", "ü" ] - } + }, { "level" : "10", "words" : [ "a", "à", "b", "c", "ç", "d", "e", "é", "è", "f", "g", "h", "i", "í", "ï", "j", "k", "l", "m", "n", "o", "ó", "ò", "p", "q", "r", "ú", "ü", "s", "t", "u", "v", "w", "x", "y", "z", "A", "À", "B", "C", "Ç", "D", "E", "É", "È", "F", "G", "H", "I", "Í", "Ï", "J", "K", "L", "M", "N", "O", "Ó", "Ò", "P", "Q", "R", "S", "T", "U", "Ú", - "Ü" + "Ü", "V", "W", "X", "Y", "Z" ] - }, + } ], "name" : "default-ca", "locale" : "ca", "description" : "Catalan" } diff --git a/src/activities/louis-braille/ActivityInfo.qml b/src/activities/louis-braille/ActivityInfo.qml index 6e7b2e3bb..5eb315b58 100644 --- a/src/activities/louis-braille/ActivityInfo.qml +++ b/src/activities/louis-braille/ActivityInfo.qml @@ -1,35 +1,35 @@ /* GCompris - ActivityInfo.qml * * Copyright (C) 2015 Arkit Vora * * 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: "louis-braille/LouisBraille.qml" difficulty: 4 icon: "louis-braille/resource/louis.png" author: "Arkit Vora " demo: true - title: "The History of Louis Braille" - description: "Review the major dates of the inventor of the Braille System" + title: qsTr("The History of Louis Braille") + description: qsTr("Review the major dates of the inventor of the Braille System") //intro: "Discover the history behind Louis Braille." goal: "" prerequisite: "" - manual: "Read the history of Louis Braille, his biography and discovery of the Braille system. + manual: qsTr("Read the history of Louis Braille, his biography and discovery of the Braille system.) Click on the previous and next buttons to move to the respective story page. At the end, arrange the sequence in the chronological order." - credit: "Louis Braille Video: < http://www.youtube.com/watch?v=9bdfC2j_4x4 >" + credit: qsTr("Louis Braille Video: < http:\/\/www.youtube.com/watch?v=9bdfC2j_4x4 >") section: "discovery braille" } diff --git a/src/activities/louis-braille/ReorderList.qml b/src/activities/louis-braille/ReorderList.qml index 2ac8b8d07..c25e51225 100644 --- a/src/activities/louis-braille/ReorderList.qml +++ b/src/activities/louis-braille/ReorderList.qml @@ -1,191 +1,191 @@ /* GCompris - List.qml * * Copyright (C) 2014 Arkit Vora * * Authors: * (GTK+ version) * Arkit Vora (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.1 import GCompris 1.0 import "../../core" import "louis-braille.js" as Activity Rectangle { id: wholeBody width: parent.width height: parent.height color: "#ff55afad" property color goodColor: colorMode ? "#ffc1ffb4" : "#FFF" property color badColor: colorMode ? "#FFF" : "#FFF" property bool colorMode: true property Item bonus property int selectedIndex: -1 property alias containerModel: list.model signal up signal down signal space onUp: list.decrementCurrentIndex() onDown: list.incrementCurrentIndex() onSpace: { if(list.currentIndex == selectedIndex) { selectedIndex = -1 } else if(selectedIndex != -1) { containerModel.move(selectedIndex, list.currentIndex, 1) list.currentIndex -= 1 selectedIndex = -1 } else { selectedIndex = list.currentIndex } } function checkWin() { var win = true // The shifted numbering comes from the header in the List for(var i = 1; i < list.count + 1; i++) { if(!list.contentItem.children[i] || list.contentItem.children[i].placed === false) win = false } if(win) { list.currentIndex = -1 bonus.good("tux") } } Component { id: listElement Rectangle { id: listRect color: wholeBody.selectedIndex == index ? "#b5b9ff" : (placed ? goodColor : badColor) border.width: list.currentIndex == index ? 0 : 1 border.color: "#ff525c5c" radius: 3 width: list.width height: Math.max(textinfo.height * 1.3, 50 * ApplicationInfo.ratio) property int sequence: model.sequence property bool placed: model.sequence === index property string text: model.text SequentialAnimation { id: borderAnim running: list.currentIndex == index loops: Animation.Infinite NumberAnimation { target: listRect property: "border.width" to: 5; duration: 500 easing.type: Easing.InOutQuad } NumberAnimation { target: listRect property: "border.width" to: 0; duration: 500 easing.type: Easing.InOutQuad } } GCText { id: textinfo text: listRect.text anchors.centerIn: parent horizontalAlignment: Text.AlignHCenter width: parent.width * 0.94 wrapMode: Text.WordWrap fontSize: regularSize } MouseArea { id: dragArea anchors.fill: parent onClicked: { wholeBody.selectedIndex = -1 if(list.currentIndex == index) { list.currentIndex = -1 } else if(list.currentIndex == -1) { list.currentIndex = index } else { containerModel.move(list.currentIndex, index, 1) list.currentIndex = -1 } } } Behavior on color { ColorAnimation { duration: 200 } } } } ListModel { id: containerModel } ListView { id: list anchors { fill: parent bottomMargin: bar.height leftMargin: 30 * ApplicationInfo.ratio rightMargin: 30 * ApplicationInfo.ratio topMargin: 10 * ApplicationInfo.ratio } width: parent.width * 0.7 model: containerModel spacing: 5 * ApplicationInfo.ratio delegate: listElement interactive: true header: Rectangle { width: parent.width height: heading.height + 10 color: "#cceaeaea" GCText { id: heading text: qsTr("Arrange the events in the order in which they happened. " + - "Select the line to move then touch it's target position.") + "Select the line to move, then touch its target position.") width: parent.width - 4 wrapMode: Text.WordWrap fontSize: regularSize } } onCurrentIndexChanged: timer.restart() displaced: Transition { NumberAnimation { properties: "y"; duration: 500 } } move: Transition { NumberAnimation { properties: "y"; duration: 500 } } Component.onCompleted: currentIndex = -1 } Timer { id: timer interval: 1000 running: false repeat: false onTriggered: wholeBody.checkWin() } } diff --git a/src/activities/menu/ConfigurationItem.qml b/src/activities/menu/ConfigurationItem.qml index b38cf57ec..ea6360a5c 100644 --- a/src/activities/menu/ConfigurationItem.qml +++ b/src/activities/menu/ConfigurationItem.qml @@ -1,571 +1,571 @@ /* GCompris - ConfigurationItem.qml * * Copyright (C) 2014 Johnny Jazeix * * Authors: * 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 QtQuick 2.2 import QtQuick.Controls 1.0 import QtQuick.Controls.Styles 1.0 import GCompris 1.0 import "../../core" import "qrc:/gcompris/src/core/core.js" as Core Item { property var languages: allLangs.languages id: dialogConfig height: column.height LanguageList { id: allLangs } Column { id: column spacing: 10 width: parent.width // Put configuration here Row { id: demoModeBox width: parent.width spacing: 10 property bool checked: !ApplicationSettings.isDemoMode Image { sourceSize.height: 50 * ApplicationInfo.ratio source: demoModeBox.checked ? "qrc:/gcompris/src/core/resource/apply.svg" : "qrc:/gcompris/src/core/resource/cancel.svg" MouseArea { anchors.fill: parent onClicked: { if(ApplicationSettings.isDemoMode) ApplicationSettings.isDemoMode = false } } } Button { width: parent.parent.width - 50 * ApplicationInfo.ratio - 10 * 2 height: parent.height enabled: ApplicationSettings.isDemoMode anchors.leftMargin: 10 anchors.verticalCenter: parent.verticalCenter text: demoModeBox.checked ? qsTr("You have the full version") : qsTr("Buy the full version").toUpperCase() style: ButtonStyle { background: Rectangle { implicitWidth: 100 implicitHeight: 25 border.width: control.activeFocus ? 4 : 2 border.color: "black" radius: 10 gradient: Gradient { GradientStop { position: 0 ; color: control.pressed ? "#87ff5c" : ApplicationSettings.isDemoMode ? "#ffe85c" : "#EEEEEE"} GradientStop { position: 1 ; color: control.pressed ? "#44ff00" : ApplicationSettings.isDemoMode ? "#f8d600" : "#AAAAAA"} } } label: GCText { text: control.text horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap } } onClicked: { if(ApplicationSettings.isDemoMode) ApplicationSettings.isDemoMode = false } } } GCDialogCheckBox { id: displayLockedActivitiesBox text: qsTr("Show locked activities") visible: ApplicationSettings.isDemoMode checked: showLockedActivities onCheckedChanged: { showLockedActivities = checked; } } GCDialogCheckBox { id: enableAudioVoicesBox text: qsTr("Enable audio voices") checked: isAudioVoicesEnabled onCheckedChanged: { isAudioVoicesEnabled = checked; } } GCDialogCheckBox { id: enableAudioEffectsBox text: qsTr("Enable audio effects") checked: isAudioEffectsEnabled onCheckedChanged: { isAudioEffectsEnabled = checked; } } GCDialogCheckBox { id: enableFullscreenBox text: qsTr("Fullscreen") checked: isFullscreen onCheckedChanged: { isFullscreen = checked; } } GCDialogCheckBox { id: enableVirtualKeyboardBox text: qsTr("Virtual Keyboard") checked: isVirtualKeyboard onCheckedChanged: { isVirtualKeyboard = checked; } } GCDialogCheckBox { id: enableAutomaticDownloadsBox checked: isAutomaticDownloadsEnabled text: qsTr("Enable automatic downloads/updates of sound files") onCheckedChanged: { isAutomaticDownloadsEnabled = checked; } } GCDialogCheckBox { id: sectionVisibleBox checked: sectionVisible text: qsTr("The activity section menu is visible") onCheckedChanged: { sectionVisible = checked; } } Flow { spacing: 5 width: parent.width GCComboBox { id: fontBox model: fonts width: 250 * ApplicationInfo.ratio background: dialogActivityConfig label: qsTr("Font selector") } } Flow { spacing: 5 width: parent.width Slider { id: baseFontSizeSlider width: 250 * ApplicationInfo.ratio style: GCSliderStyle {} maximumValue: ApplicationSettings.baseFontSizeMax minimumValue: ApplicationSettings.baseFontSizeMin stepSize: 1.0 tickmarksEnabled: true updateValueWhileDragging: true value: baseFontSize onValueChanged: ApplicationSettings.baseFontSize = value; } GCText { id: baseFontSizeText text: qsTr("Font size") fontSize: mediumSize wrapMode: Text.WordWrap } Button { height: 30 * ApplicationInfo.ratio text: qsTr("Default"); style: GCButtonStyle {} onClicked: baseFontSizeSlider.value = 0.0 } } Flow { spacing: 5 width: parent.width GCComboBox { id: fontCapitalizationBox model: fontCapitalizationModel width: 250 * ApplicationInfo.ratio background: dialogActivityConfig label: qsTr("Font Capitalization") } } Flow { spacing: 5 width: parent.width GCComboBox { id: languageBox model: dialogConfig.languages width: 300 * ApplicationInfo.ratio background: dialogActivityConfig onCurrentIndexChanged: voicesRow.localeChanged(); label: qsTr("Language selector") } } Flow { id: voicesRow width: parent.width spacing: 5 * ApplicationInfo.ratio property bool haveLocalResource: false function localeChanged() { var language = dialogConfig.languages[languageBox.currentIndex].text; voicesRow.haveLocalResource = DownloadManager.isDataRegistered( "voices-" + ApplicationInfo.CompressedAudio + "/" + ApplicationInfo.getVoicesLocale(dialogConfig.languages[languageBox.currentIndex].locale) ) } Connections { target: DownloadManager onDownloadFinished: voicesRow.localeChanged() } GCText { id: voicesText text: qsTr("Localized voices") } Image { id: voicesImage sourceSize.height: 30 * ApplicationInfo.ratio source: voicesRow.haveLocalResource ? "qrc:/gcompris/src/core/resource/apply.svg" : "qrc:/gcompris/src/core/resource/cancel.svg" } Button { id: voicesButton height: 30 * ApplicationInfo.ratio visible: ApplicationInfo.isDownloadAllowed text: voicesRow.haveLocalResource ? qsTr("Check for updates") : qsTr("Download") style: GCButtonStyle {} onClicked: { if (DownloadManager.downloadResource( DownloadManager.getVoicesResourceForLocale(dialogConfig.languages[languageBox.currentIndex].locale))) { var downloadDialog = Core.showDownloadDialog(dialogConfig.parent.rootItem, {}); } } } } Flow { width: parent.width spacing: 5 * ApplicationInfo.ratio GCText { text: qsTr("Difficulty filter:") fontSize: mediumSize height: 50 * ApplicationInfo.ratio } // Padding Item { height: 1 width: 10 * ApplicationInfo.ratio } Image { source: "qrc:/gcompris/src/core/resource/bar_next.svg" sourceSize.height: Math.min(50 * ApplicationInfo.ratio, parent.width / 8) MouseArea { anchors.fill: parent onClicked: { filterRepeater.setMin(filterRepeater.min + 1) } } } // Padding Item { height: 1 width: 5 * ApplicationInfo.ratio } // Level filtering Repeater { id: filterRepeater model: 6 property int min: ApplicationSettings.filterLevelMin property int max: ApplicationSettings.filterLevelMax function setMin(value) { var newMin if(min < 1) newMin = 1 else if(min > 6) newMin = 6 else if(max >= value) newMin = value if(newMin) ApplicationSettings.filterLevelMin = newMin } function setMax(value) { var newMax if(max < 1) newMax = 1 else if(max > 6) newMax = 6 else if(min <= value) newMax = value if(newMax) ApplicationSettings.filterLevelMax = newMax } Image { source: "qrc:/gcompris/src/core/resource/difficulty" + (modelData + 1) + ".svg"; sourceSize.width: Math.min(50 * ApplicationInfo.ratio, parent.width / 8) opacity: modelData + 1 >= filterRepeater.min && modelData + 1 <= filterRepeater.max ? 1 : 0.4 property int value: modelData + 1 MouseArea { anchors.fill: parent onClicked: { if(parent.value < filterRepeater.max) { if(parent.opacity == 1) filterRepeater.setMin(parent.value + 1) else filterRepeater.setMin(parent.value) } else if(parent.value > filterRepeater.min) { if(parent.opacity == 1) filterRepeater.setMax(parent.value - 1) else filterRepeater.setMax(parent.value) } } } } } // Padding Item { height: 1 width: 5 * ApplicationInfo.ratio } Image { source: "qrc:/gcompris/src/core/resource/bar_previous.svg" sourceSize.height: Math.min(50 * ApplicationInfo.ratio, parent.width / 8) MouseArea { anchors.fill: parent onClicked: { filterRepeater.setMax(filterRepeater.max - 1) } } } } } property bool showLockedActivities: ApplicationSettings.showLockedActivities property bool isAudioVoicesEnabled: ApplicationSettings.isAudioVoicesEnabled property bool isAudioEffectsEnabled: ApplicationSettings.isAudioEffectsEnabled property bool isFullscreen: ApplicationSettings.isFullscreen property bool isVirtualKeyboard: ApplicationSettings.isVirtualKeyboard property bool isAutomaticDownloadsEnabled: ApplicationSettings.isAutomaticDownloadsEnabled property bool sectionVisible: ApplicationSettings.sectionVisible property int baseFontSize // don't bind to ApplicationSettings.baseFontSize // or we get a binding loop warning function loadFromConfig() { // Synchronize settings with data showLockedActivities = ApplicationSettings.showLockedActivities isAudioVoicesEnabled = ApplicationSettings.isAudioVoicesEnabled enableAudioVoicesBox.checked = isAudioVoicesEnabled isAudioEffectsEnabled = ApplicationSettings.isAudioEffectsEnabled enableAudioEffectsBox.checked = isAudioEffectsEnabled isFullscreen = ApplicationSettings.isFullscreen enableFullscreenBox.checked = isFullscreen isVirtualKeyboard = ApplicationSettings.isVirtualKeyboard enableVirtualKeyboardBox.checked = isVirtualKeyboard isAutomaticDownloadsEnabled = ApplicationSettings.isAutomaticDownloadsEnabled enableAutomaticDownloadsBox.checked = isAutomaticDownloadsEnabled sectionVisible = ApplicationSettings.sectionVisible sectionVisibleBox.checked = sectionVisible baseFontSize = ApplicationSettings.baseFontSize; // Set locale for(var i = 0 ; i < dialogConfig.languages.length ; i ++) { if(dialogConfig.languages[i].locale === ApplicationSettings.locale) { languageBox.currentIndex = i; break; } } // Set font for(var i = 0 ; i < fonts.count ; i ++) { if(fonts.get(i).text == ApplicationSettings.font) { fontBox.currentIndex = i; break; } } // Set font capitalization for(var i = 0 ; i < fontCapitalizationModel.length ; i ++) { if(fontCapitalizationModel[i].value == ApplicationSettings.fontCapitalization) { fontCapitalizationBox.currentIndex = i; break; } } } function save() { ApplicationSettings.showLockedActivities = showLockedActivities ApplicationSettings.isAudioVoicesEnabled = isAudioVoicesEnabled ApplicationSettings.isAudioEffectsEnabled = isAudioEffectsEnabled ApplicationSettings.isFullscreen = isFullscreen ApplicationSettings.isVirtualKeyboard = isVirtualKeyboard ApplicationSettings.isAutomaticDownloadsEnabled = isAutomaticDownloadsEnabled ApplicationSettings.sectionVisible = sectionVisible ApplicationSettings.isEmbeddedFont = fonts.get(fontBox.currentIndex).isLocalResource; ApplicationSettings.font = fonts.get(fontBox.currentIndex).text ApplicationSettings.fontCapitalization = fontCapitalizationModel[fontCapitalizationBox.currentIndex].value ApplicationSettings.saveBaseFontSize(); if (ApplicationSettings.locale != dialogConfig.languages[languageBox.currentIndex].locale) { ApplicationSettings.locale = dialogConfig.languages[languageBox.currentIndex].locale if(!DownloadManager.isDataRegistered( "voices-" + ApplicationInfo.CompressedAudio + "/" + ApplicationInfo.getVoicesLocale(dialogConfig.languages[languageBox.currentIndex].locale) )) { // ask for downloading new voices Core.showMessageDialog(main, - qsTr("You selected a new locale") + '\n' + qsTr("You selected a new locale.") + '\n' + qsTr("Do you want to download the corresponding sound files now?"), qsTr("Yes"), function() { // yes -> start download if (DownloadManager.downloadResource( DownloadManager.getVoicesResourceForLocale(ApplicationInfo.localeShort))) var downloadDialog = Core.showDownloadDialog(main, {}); }, qsTr("No"), null, null ); } else // check for updates or/and register new voices DownloadManager.updateResource( DownloadManager.getVoicesResourceForLocale(ApplicationSettings.locale)) } } function reset() { ApplicationSettings.baseFontSize = baseFontSize; } ListModel { id: fonts Component.onCompleted: { var systemFonts = Qt.fontFamilies(); var rccFonts = ApplicationInfo.getFontsFromRcc(); // Remove explicitly all *symbol* and *ding* fonts var excludedFonts = ApplicationInfo.getSystemExcludedFonts(); excludedFonts.push("ding"); excludedFonts.push("symbol"); for(var i = 0 ; i < systemFonts.length ; ++ i) { var isExcluded = false; // Remove symbol fonts for(var j = 0 ; j < excludedFonts.length ; ++ j) { if(systemFonts[i].toLowerCase().indexOf(excludedFonts[j].toLowerCase()) != -1) { isExcluded = true; break; } } // Remove fonts from rcc (if you have a default font from rcc, Qt will add it to systemFonts) for(var j = 0 ; j < rccFonts.length ; ++ j) { if(rccFonts[j].toLowerCase().indexOf(systemFonts[i].toLowerCase()) != -1) { isExcluded = true; break; } } // Finally, we know if we add this font or not if(!isExcluded) { fonts.append({ "text": systemFonts[i], "isLocalResource": false }); } } for(var i = 0 ; i < rccFonts.length ; ++ i) { // Append fonts from resources fonts.append({ "text": rccFonts[i], "isLocalResource": true }); } } } property variant fontCapitalizationModel: [ { text: qsTr("Mixed case (default)"), value: Font.MixedCase }, { text: qsTr("All uppercase"), value: Font.AllUppercase }, { text: qsTr("All lowercase"), value: Font.AllLowercase } ] function hasConfigChanged() { return (ApplicationSettings.locale !== dialogConfig.languages[languageBox.currentIndex].locale || (ApplicationSettings.sectionVisible != sectionVisible) || (ApplicationSettings.font != fonts.get(fontBox.currentIndex).text) || (ApplicationSettings.isEmbeddedFont != fonts.get(fontBox.currentIndex).isLocalResource) || (ApplicationSettings.isEmbeddedFont != fonts.get(fontBox.currentIndex).isLocalResource) || (ApplicationSettings.fontCapitalization != fontCapitalizationModel[(fontcapitalizationBox.currentIndex)].value) || (ApplicationSettings.isAudioVoicesEnabled != isAudioVoicesEnabled) || (ApplicationSettings.isAudioEffectsEnabled != isAudioEffectsEnabled) || (ApplicationSettings.isFullscreen != isFullscreen) || (ApplicationSettings.isVirtualKeyboard != isVirtualKeyboard) || (ApplicationSettings.isAutomaticDownloadsEnabled != isAutomaticDownloadsEnabled) || (ApplicationSettings.baseFontSize != baseFontSize) || (ApplicationSettings.showLockedActivities != showLockedActivities) ); } } diff --git a/src/activities/simplepaint/ActivityInfo.qml b/src/activities/simplepaint/ActivityInfo.qml index 398260d89..1c7dde53c 100644 --- a/src/activities/simplepaint/ActivityInfo.qml +++ b/src/activities/simplepaint/ActivityInfo.qml @@ -1,34 +1,34 @@ /* GCompris - ActivityInfo.qml * - * Copyright (C) 2015 Your Name + * Copyright (C) 2015 Bruno Coudoin * * 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: "simplepaint/Simplepaint.qml" difficulty: 1 icon: "simplepaint/simplepaint.svg" author: "Bruno Coudoin " demo: true - title: "A simple drawing activity" - description: "Create your own drawing" + title: qsTr("A simple drawing activity") + description: qsTr("Create your own drawing") // intro: "Select a color and paint the rectangles as you like to create a drawing." - goal: "Enhance creative skills" + goal: qsTr("Enhance creative skills") prerequisite: "" - manual: "Select a color and paint the rectangles as you like to create a drawing." + manual: qsTr("Select a color and paint the rectangles as you like to create a drawing.") credit: "" section: "fun" } diff --git a/src/activities/traffic/Traffic.qml b/src/activities/traffic/Traffic.qml index 6b11b8b62..bb8004247 100644 --- a/src/activities/traffic/Traffic.qml +++ b/src/activities/traffic/Traffic.qml @@ -1,195 +1,194 @@ /* GCompris - Traffic.qml * * Copyright (C) 2014 Holger Kaelberer * * Authors: * Bruno Coudoin (GTK+ version) * Holger Kaelberer (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.1 -import QtQuick.Controls 1.0 import GCompris 1.0 import "../../core" import "traffic.js" as Activity ActivityBase { id: activity onStart: focus = true onStop: {} pageComponent: Image { id: background source: "qrc:/gcompris/src/activities/traffic/resource/traffic_bg.svg" sourceSize.width: parent.width fillMode: Image.PreserveAspectCrop signal start signal stop property string mode: "IMAGE" // allow to choose between "COLOR" and "IMAGE" // mode, candidate for a config dialog Component.onCompleted: { dialogActivityConfig.getInitialConfiguration() activity.start.connect(start) activity.stop.connect(stop) } QtObject { id: items property Item main: activity.main property GCAudio audioEffects: activity.audioEffects property alias background: background property alias bar: bar property alias bonus: bonus property alias score: score property alias jamBox: jamBox property alias jamGrid: jamGrid } onStart: { Activity.start(items, mode) } onStop: { Activity.stop() } Image { id: jamBox source: "qrc:/gcompris/src/activities/traffic/resource/traffic_box.svg" anchors.centerIn: parent sourceSize.width: Math.max(400, background.width * 0.4175 * ApplicationInfo.ratio) //334 sourceSize.height: Math.max(400, background.height * 0.636538462 * ApplicationInfo.ratio) //331 fillMode: Image.PreserveAspectFit property double scaleFactor: Math.min(background.width / background.sourceSize.width, background.height / background.sourceSize.height) Grid { id: jamGrid anchors.centerIn: parent width: parent.width - 86 * jamBox.scaleFactor * ApplicationInfo.ratio height: parent.height - 86 * jamBox.scaleFactor * ApplicationInfo.ratio columns: 6 rows: 6 spacing: 0 // Add an alias to mode so it can be used on Car items property alias mode: background.mode Repeater { id: gridRepeater model: jamGrid.columns * jamGrid.rows delegate: Rectangle { id: gridDelegate height: jamGrid.height/ jamGrid.rows width: height border.width: 1 border.color: "white" color: "#444444" } } } } DialogHelp { id: dialogHelp onClose: home() } DialogActivityConfig { id: dialogActivityConfig currentActivity: activity content: Component { Item { property alias modeBox: modeBox property var availableModes: [ { "text": qsTr("Colors"), "value": "COLOR" }, { "text": qsTr("Images"), "value": "IMAGE" } ] Flow { id: flow spacing: 5 width: dialogActivityConfig.width GCComboBox { id: modeBox model: availableModes width: 250 * ApplicationInfo.ratio background: dialogActivityConfig label: qsTr("Select your mode") } } } } onClose: home() onLoadData: { if(dataToSave && dataToSave["mode"]) { mode = dataToSave["mode"]; Activity.mode = dataToSave["mode"]; } } onSaveData: { mode = dialogActivityConfig.configItem.availableModes[dialogActivityConfig.configItem.modeBox.currentIndex].value; dataToSave = {"mode": mode} Activity.mode = mode; } function setDefaultValues() { for(var i = 0 ; i < dialogActivityConfig.configItem.availableModes.length ; i ++) { if(dialogActivityConfig.configItem.availableModes[i].value === mode) { dialogActivityConfig.configItem.modeBox.currentIndex = i; break; } } } } Bar { id: bar content: BarEnumContent { value: help | home | level | reload | config } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() onReloadClicked: Activity.initLevel() onConfigClicked: { dialogActivityConfig.active = true // Set default values dialogActivityConfig.setDefaultValues(); displayDialog(dialogActivityConfig) } } Bonus { id: bonus Component.onCompleted: win.connect(Activity.nextSubLevel) } Score { id: score anchors.top: parent.top anchors.topMargin: 10 * ApplicationInfo.ratio anchors.right: parent.right anchors.rightMargin: 10 * ApplicationInfo.ratio anchors.bottom: undefined } } }