diff --git a/CMakeLists.txt b/CMakeLists.txt index 01de9a843..9154dbd35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,407 +1,466 @@ if(SAILFISHOS) cmake_minimum_required(VERSION 2.8.11) else(SAILfISHOS) cmake_minimum_required(VERSION 2.8.12) endif() project(gcompris-qt C CXX) # Set c++11 support include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(my_cxx_flags "-std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) set(my_cxx_flags "-std=c++0x") else() message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}") # enable qml debugging for DEBUG builds: set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG") set(GCOMPRIS_MAJOR_VERSION 0) -set(GCOMPRIS_MINOR_VERSION 60) +set(GCOMPRIS_MINOR_VERSION 70) set(GCOMPRIS_PATCH_VERSION 0) # Set the BUILD_DATE string(TIMESTAMP BUILD_DATE %Y%M) # cmake modules setup find_package(ECM 1.4.0 QUIET NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_SOURCE_DIR}/cmake/) set(CMAKE_PREFIX_PATH "${Qt5_DIR}/lib/cmake/Qt5") # KDE po to qm tools if(ECM_FOUND) include(ECMPoQmTools) if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() endif(ECM_FOUND) if(CMAKE_SYSTEM_NAME STREQUAL Android) find_package(ECM) set(ANDROID 1) # TODO: possibly should be setup by toolchain one day set(QT_QMAKE_EXECUTABLE "${_qt5Core_install_prefix}/bin/qmake") # workaround until this fix is in released ECM if(ECM_VERSION VERSION_LESS "5.15.0") add_definitions(-DANDROID) endif() endif() # Set executable filename if(ANDROID) set(GCOMPRIS_EXECUTABLE_NAME GCompris) if("${ANDROID_ARCHITECTURE}" STREQUAL "x86") # We always want x86 to be a release above to arm one because the play # store want x86 to be pushed after arm. MATH(EXPR GCOMPRIS_MINOR_VERSION "${GCOMPRIS_MINOR_VERSION}+1") endif("${ANDROID_ARCHITECTURE}" STREQUAL "x86") elseif(SAILFISHOS) set(GCOMPRIS_EXECUTABLE_NAME harbour-gcompris-qt) +elseif(WIN32) + set(GCOMPRIS_EXECUTABLE_NAME GCompris) else() set(GCOMPRIS_EXECUTABLE_NAME gcompris-qt) endif() set(GCOMPRIS_VERSION ${GCOMPRIS_MAJOR_VERSION}.${GCOMPRIS_MINOR_VERSION}) # An integer value that represents the version of the application # Increase it at each release math(EXPR GCOMPRIS_VERSION_CODE "${GCOMPRIS_MAJOR_VERSION}*10000 + ${GCOMPRIS_MINOR_VERSION}*100 + ${GCOMPRIS_PATCH_VERSION}") # KDE po to qm tools if(ECM_FOUND) include(ECMPoQmTools) if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() endif(ECM_FOUND) # prevent build in source directory if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") message(SEND_ERROR "Building in the source directory is not supported.") message(FATAL_ERROR "Please remove the created \"CMakeCache.txt\" file, the \"CMakeFiles\" directory and create a build directory and call \"${CMAKE_COMMAND} \".") endif("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}") # Sailfish does not provide a recent Qt version if(SAILFISHOS) set(QT_REQUIRED_VERSION 5.2.2) else() set(QT_REQUIRED_VERSION 5.3.0) endif() find_package(Qt5 ${QT_REQUIRED_VERSION} REQUIRED Qml Quick Gui Multimedia Core Svg Xml XmlPatterns LinguistTools Sensors) find_package (KF5 QUIET COMPONENTS DocTools ) if(KF5_FOUND) include(KDEInstallDirs) -endif(KF5_FOUND) -FIND_PROGRAM(LCONVERT_EXECUTABLE lconvert lconvert-qt5 + if (ECM_VERSION VERSION_GREATER "1.6.0") + add_subdirectory(images) + install(FILES org.kde.gcompris.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) + install(FILES org.kde.gcompris.desktop DESTINATION ${KDE_INSTALL_APPDIR}) + endif() +endif() + +FIND_PROGRAM(LCONVERT_EXECUTABLE lconvert-qt5 lconvert PATHS ${Qt5_DIR}/../../../bin/ /usr/local/bin /usr/bin/ NO_DEFAULT_PATH ) -FIND_PROGRAM(LRELEASE_EXECUTABLE lrelease lrelease-qt5 +FIND_PROGRAM(LRELEASE_EXECUTABLE lrelease-qt5 lrelease PATHS ${Qt5_DIR}/../../../bin/ /usr/local/bin /usr/bin/ NO_DEFAULT_PATH ) #get_cmake_property(_variableNames VARIABLES) #foreach (_variableName ${_variableNames}) # message("${_variableName}=${${_variableName}}") #endforeach() set(ACTIVATION_MODE "no" CACHE STRING "Policy for activation [no|inapp|internal]") option(WITH_DEMO_ONLY "Include only demo activities" OFF) option(WITH_DOWNLOAD "Internal download" ON) if(WITH_DOWNLOAD) set(ANDROID_INTERNET_PERMISSION "") set(ANDROID_ACCESS_NETWORK_STATE_PERMISSION "") endif(WITH_DOWNLOAD) # Set output directory if(CMAKE_HOST_APPLE) set(_bundle_bin gcompris-qt.app/Contents/MacOS) set(_data_dest_dir bin/${_bundle_bin}/../Resources) elseif(ANDROID) set(_data_dest_dir android/assets) else() set(_data_dest_dir share/${GCOMPRIS_EXECUTABLE_NAME}) endif() if(ANDROID) # Android .so output set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/android/libs/${ANDROID_ABI}/) set(GCOMPRIS_TRANSLATIONS_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir} CACHE INTERNAL "" FORCE) set(GCOMPRIS_RCC_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir} CACHE INTERNAL "" FORCE) if(ACTIVATION_MODE STREQUAL "inapp") set(ANDROID_BILLING_PERMISSION "") set(ANDROID_PACKAGE "net.gcompris") else(ACTIVATION_MODE) set(ANDROID_PACKAGE "net.gcompris.full") endif() add_subdirectory(android) elseif(CMAKE_HOST_APPLE) # MacOSX build set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(GCOMPRIS_TRANSLATIONS_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir}/translations CACHE INTERNAL "" FORCE) set(GCOMPRIS_RCC_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir}/rcc CACHE INTERNAL "" FORCE) else() # Desktop build set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(GCOMPRIS_TRANSLATIONS_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir}/translations CACHE INTERNAL "" FORCE) set(GCOMPRIS_RCC_DIR ${CMAKE_BINARY_DIR}/${_data_dest_dir}/rcc CACHE INTERNAL "" FORCE) endif(ANDROID) # Always create these folders add_custom_command( OUTPUT shareFolders COMMAND cmake -E make_directory ${GCOMPRIS_TRANSLATIONS_DIR} COMMAND cmake -E make_directory ${GCOMPRIS_RCC_DIR} ) add_custom_target( createShareFolders ALL DEPENDS shareFolders ) include(cmake/rcc.cmake) # Translations handling # Simple command calling the python script add_custom_command( OUTPUT retrievePoFilesFromSvn COMMAND python2 tools/l10n-fetch-po-files.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) # Install translations add_custom_target(getSvnTranslations DEPENDS retrievePoFilesFromSvn COMMENT "Re-run cmake after this to be able to run BuildTranslations with the latest files" ) # Get all po files in po/. You can get them doing: python2 tools/l10n-fetch-po-files.py file(GLOB TRANSLATIONS_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "po/*.po") # Set the output dir for the translation files to /bin foreach(PoSource ${TRANSLATIONS_FILES}) # Changes the .po extension to .ts string(REPLACE ".po" ".ts" TsSource ${PoSource}) # Removes the po/ folder string(REPLACE "po/" "" TsSource ${TsSource}) # qm filename string(REPLACE ".ts" ".qm" QmOutput ${TsSource}) set(OutTsFile ${CMAKE_BINARY_DIR}/tmp/${TsSource}) add_custom_command( OUTPUT ${QmOutput} COMMAND cmake -E make_directory ${GCOMPRIS_TRANSLATIONS_DIR} COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/tmp # Remove the obsolete translations and set po in the ts output file COMMAND msgattrib --no-obsolete ${CMAKE_CURRENT_SOURCE_DIR}/${PoSource} -o ${OutTsFile} # Convert the po into ts COMMAND ${LCONVERT_EXECUTABLE} -if po -of ts -i ${OutTsFile} -o ${OutTsFile} # Convert the ts in qm removing non finished translations COMMAND ${LRELEASE_EXECUTABLE} -compress -nounfinished ${OutTsFile} -qm ${GCOMPRIS_TRANSLATIONS_DIR}/${QmOutput} ) list(APPEND QM_FILES ${QmOutput}) endforeach() # Install translations add_custom_target(BuildTranslations DEPENDS ${QM_FILES} COMMENT "If you don't have the .po, you need to run make getSvnTranslations first then re-run cmake" ) +add_custom_command( + OUTPUT doBundleTranslations + COMMAND 7z a -w${CMAKE_BINARY_DIR}/share/${GCOMPRIS_EXECUTABLE_NAME} + ${CMAKE_BINARY_DIR}/translations-${GCOMPRIS_VERSION}.7z + ${CMAKE_BINARY_DIR}/share/${GCOMPRIS_EXECUTABLE_NAME}/translations + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) +# Bundle translations +add_custom_target(BundleTranslations + DEPENDS doBundleTranslations + COMMENT "If you want to provide a zip of the translations on a server (run make BuildTranslations first)" + ) + +add_custom_command( + OUTPUT doDlAndInstallBundledTranslations + COMMAND curl -fsS -o translations-${GCOMPRIS_VERSION}.7z + http://gcompris.net/download/translations-${GCOMPRIS_VERSION}.7z + COMMAND 7z x -y -o${CMAKE_BINARY_DIR}/share/${GCOMPRIS_EXECUTABLE_NAME} + translations-${GCOMPRIS_VERSION}.7z + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + ) +# Download and install bundled translations +add_custom_target(DlAndInstallBundledTranslations + DEPENDS doDlAndInstallBundledTranslations + COMMENT "Download the bundled translation and install them in the build dir" + ) + if(CMAKE_HOST_APPLE) install(DIRECTORY ${GCOMPRIS_TRANSLATIONS_DIR} DESTINATION ${_bundle_bin}) else() install(DIRECTORY ${GCOMPRIS_TRANSLATIONS_DIR} DESTINATION ${_data_dest_dir}) endif() # Build standalone package option -> if ON, we will copy the required Qt files in the build package. # If OFF, "make install" will not copy Qt files so only GCompris files will be packaged. # By default, it is true on Windows (as we deliver NSIS package), macOS (bundled), android (apk) and false on linux (to do make install) # If you want to create a STGZ package for linux (auto-extractible), override this variable by typing : cmake -DBUILD_STANDALONE=ON if(UNIX AND NOT ANDROID AND NOT APPLE) option(BUILD_STANDALONE "Build a standalone package when typing 'make package'" OFF) else() option(BUILD_STANDALONE "Build a standalone package when typing 'make package'" ON) endif() option(WITH_KIOSK_MODE "Set the kiosk mode by default" OFF) if(WIN32) set(COMPRESSED_AUDIO "mp3" CACHE STRING "Compressed Audio format [ogg|aac|mp3]") elseif(APPLE) set(COMPRESSED_AUDIO "aac" CACHE STRING "Compressed Audio format [ogg|aac|mp3]") else() set(COMPRESSED_AUDIO "ogg" CACHE STRING "Compressed Audio format [ogg|aac|mp3]") endif() file(GLOB_RECURSE OGG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/ "*.ogg") foreach(OGG_FILE ${OGG_FILES}) # This should only replace the extension string(REGEX REPLACE "ogg$" "aac" AAC_FILE ${OGG_FILE}) add_custom_command( OUTPUT ${AAC_FILE} # Put the good line depending on your installation COMMAND avconv -v warning -i ${OGG_FILE} -acodec libvo_aacenc ${AAC_FILE} #COMMAND ffmpeg -v warning -i ${OGG_FILE} -acodec aac -strict -2 ${AAC_FILE} ) list(APPEND AAC_FILES ${AAC_FILE}) # This should only replace the extension string(REGEX REPLACE "ogg$" "mp3" MP3_FILE ${OGG_FILE}) add_custom_command( OUTPUT ${MP3_FILE} # Put the good line depending on your installation #COMMAND avconv -v warning -i ${OGG_FILE} -acodec mp3 ${MP3_FILE} COMMAND ffmpeg -v warning -i ${OGG_FILE} -acodec mp3 -strict -2 ${MP3_FILE} ) list(APPEND MP3_FILES ${MP3_FILE}) endforeach() add_custom_target( createAacFromOgg DEPENDS ${AAC_FILES} ) add_custom_target( createMp3FromOgg DEPENDS ${MP3_FILES} ) # predownload assets (voices and images) and install them in the rcc folder set(DOWNLOAD_ASSETS "" CACHE STRING "Download and packages images and voices. use a list like: words,en,fr,pt_BR to retrieve multiple files") add_custom_command( OUTPUT predownloadAssets COMMAND python2 tools/download-assets.py ${DOWNLOAD_ASSETS} ${COMPRESSED_AUDIO} ${GCOMPRIS_RCC_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) add_custom_command( OUTPUT assetsFolders COMMAND cmake -E make_directory "${GCOMPRIS_RCC_DIR}/data2" COMMAND cmake -E make_directory "${GCOMPRIS_RCC_DIR}/data2/voices-${COMPRESSED_AUDIO}" COMMAND cmake -E make_directory "${GCOMPRIS_RCC_DIR}/data2/words" ) # Install assets add_custom_target(getAssets DEPENDS assetsFolders predownloadAssets ) +add_custom_command( + OUTPUT doBundleConvertedOggs + COMMAND 7z a converted_ogg_to_${COMPRESSED_AUDIO}-${GCOMPRIS_VERSION}.7z '-ir!src/*${COMPRESSED_AUDIO}' + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) +# Bundle oggs ready to be uploaded on a server. This ease build on system without the appropriate audio +# convertion tools. +add_custom_target(BundleConvertedOggs + DEPENDS doBundleConvertedOggs + COMMENT "Bundle the converted oggs to upload them on a server. First set COMPRESSED_AUDIO appropriately." + ) + +add_custom_command( + OUTPUT doDlAndInstallBundledConvertedOggs + COMMAND curl -fsS -o converted_ogg_to_${COMPRESSED_AUDIO}-${GCOMPRIS_VERSION}.7z + http://gcompris.net/download/converted_ogg_to_${COMPRESSED_AUDIO}-${GCOMPRIS_VERSION}.7z + COMMAND 7z x -y converted_ogg_to_${COMPRESSED_AUDIO}-${GCOMPRIS_VERSION}.7z + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) +# Download and install bundled converted oggs +add_custom_target(DlAndInstallBundledConvertedOggs + DEPENDS doDlAndInstallBundledConvertedOggs + COMMENT "Download the bundled converted oggs and install them in the source dir" + ) set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${GCOMPRIS_VERSION}) add_custom_target(dist COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD | xz > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.xz WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) if(KF5_FOUND) add_subdirectory(docs/docbook) endif(KF5_FOUND) if(SAILFISHOS) # Need to be done at the end, after src add_subdirectory(platforms/sailfishOS) endif() # # qml-box2d # set(QML_BOX2D_MODULE "auto" CACHE STRING "Policy for qml-box2d module [auto|submodule|system|disabled]") if (${QML_BOX2D_MODULE} STREQUAL "disabled") # disable all activities depending on qml-box2d set(_disabled_activities "balancebox,land_safe") message(STATUS "Disabling qml-box2d module and depending activities: ${_disabled_activities}") else() include(qt_helper) getQtQmlPath(_qt_qml_system_path) set (_box2d_system_dir "${_qt_qml_system_path}/Box2D.2.0") if (${QML_BOX2D_MODULE} STREQUAL "submodule") message(STATUS "Building qml-box2d module from submodule") set(_need_box2d_submodule "TRUE") else() # try to find module in system scope find_library(QML_BOX2D_LIBRARY NAMES Box2D libBox2D PATHS ${_box2d_system_dir} NO_DEFAULT_PATH) if (QML_BOX2D_LIBRARY) message(STATUS "Using system qml-box2d plugin at ${QML_BOX2D_LIBRARY}") # for packaging builds, copy the module manually to the correct location if(SAILFISHOS) file(COPY ${_box2d_system_dir}/qmldir ${QML_BOX2D_LIBRARY} DESTINATION share/harbour-gcompris-qt/lib/qml/Box2D.2.0) elseif(ANDROID) file(COPY ${_box2d_system_dir}/qmldir ${QML_BOX2D_LIBRARY} DESTINATION lib/qml/Box2D.2.0) endif() # FIXME: add others as needed else() if (${QML_BOX2D_MODULE} STREQUAL "auto") message(STATUS "Did not find the qml-box2d module in system scope, falling back to submodule build ...") set (_need_box2d_submodule "TRUE") else() message(FATAL_ERROR "Did not find the qml-box2d module in system scope and submodule build was not requested. Can't continue!") endif() endif() endif() if (_need_box2d_submodule) # build qml-box2d ourselves from submodule include(ExternalProject) get_property(_qmake_program TARGET ${Qt5Core_QMAKE_EXECUTABLE} PROPERTY IMPORT_LOCATION) set (_box2d_source_dir ${CMAKE_CURRENT_SOURCE_DIR}/external/qml-box2d) if(WIN32) set (_box2d_library_dir "release/") set (_box2d_library_file "Box2D.dll") else() set (_box2d_library_dir "") set (_box2d_library_file "libBox2D.so") endif() set (_box2d_install_dir ${CMAKE_CURRENT_BINARY_DIR}/lib/qml/Box2D.2.0) # make sure submodule is up2date find_package(Git) if(GIT_FOUND) execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init) endif() ExternalProject_Add(qml_box2d DOWNLOAD_COMMAND "" SOURCE_DIR ${_box2d_source_dir} CONFIGURE_COMMAND ${_qmake_program} ${_box2d_source_dir}/box2d.pro BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} INSTALL_DIR ${_box2d_install_dir} INSTALL_COMMAND cp ${_box2d_library_dir}${_box2d_library_file} ${_box2d_source_dir}/qmldir ${_box2d_install_dir} ) add_library(qml-box2d SHARED IMPORTED) set_target_properties(qml-box2d PROPERTIES IMPORTED_LOCATION ${_box2d_install_dir}/${_box2d_library_file}) if(SAILFISHOS) install(DIRECTORY ${_box2d_install_dir} DESTINATION share/harbour-gcompris-qt/lib/qml) else() install(DIRECTORY ${_box2d_install_dir} DESTINATION lib/qml) endif() endif() endif() add_subdirectory(src) diff --git a/android/res/drawable-hdpi/icon.png b/android/res/drawable-hdpi/icon.png index dd8de875d..809fa673b 100644 Binary files a/android/res/drawable-hdpi/icon.png and b/android/res/drawable-hdpi/icon.png differ diff --git a/android/res/drawable-ldpi/icon.png b/android/res/drawable-ldpi/icon.png index 04795e16f..64f5cb1e2 100644 Binary files a/android/res/drawable-ldpi/icon.png and b/android/res/drawable-ldpi/icon.png differ diff --git a/android/res/drawable-mdpi/icon.png b/android/res/drawable-mdpi/icon.png index c6e68a5c3..2f17b0e32 100644 Binary files a/android/res/drawable-mdpi/icon.png and b/android/res/drawable-mdpi/icon.png differ diff --git a/android/res/drawable-xhdpi/icon.png b/android/res/drawable-xhdpi/icon.png index 3f5afd817..6000f0a57 100644 Binary files a/android/res/drawable-xhdpi/icon.png and b/android/res/drawable-xhdpi/icon.png differ diff --git a/android/res/drawable-xxhdpi/icon.png b/android/res/drawable-xxhdpi/icon.png index bab0e602f..90e75c5f1 100644 Binary files a/android/res/drawable-xxhdpi/icon.png and b/android/res/drawable-xxhdpi/icon.png differ diff --git a/android/res/drawable-xxxhdpi/icon.png b/android/res/drawable-xxxhdpi/icon.png index dfcf8bc5e..a15d93a48 100644 Binary files a/android/res/drawable-xxxhdpi/icon.png and b/android/res/drawable-xxxhdpi/icon.png differ diff --git a/cmake/rcc.cmake b/cmake/rcc.cmake index 7df90511d..f5479d815 100644 --- a/cmake/rcc.cmake +++ b/cmake/rcc.cmake @@ -1,63 +1,61 @@ # # GCOMPRIS_ADD_RCC(resource_path ) # function(GCOMPRIS_ADD_RCC resource_path) set(options) set(oneValueArgs) set(multiValueArgs) cmake_parse_arguments(_RCC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(rcc_files ${_RCC_UNPARSED_ARGUMENTS}) get_filename_component(activity "${resource_path}" NAME) if(Qt5Widgets_VERSION_STRING VERSION_LESS 5.4.2 OR WIN32) # (cannot create it in the build dir because rcc expect local files) # Create this QRC file set(CREATED_QRC "${CMAKE_CURRENT_SOURCE_DIR}/${activity}.qrc") else() set(CREATED_QRC "${CMAKE_CURRENT_BINARY_DIR}/${activity}.qrc") endif() set(ACTIVITY_PATH "/gcompris/src/${resource_path}") file(GLOB QRC_CONTENTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${rcc_files}) file(GLOB QRC_CONTENTS_ABS ${CMAKE_CURRENT_SOURCE_DIR} ${rcc_files}) file(WRITE ${CREATED_QRC} "\n\t") foreach(FILE ${QRC_CONTENTS}) file(APPEND ${CREATED_QRC} "\n\t\t${FILE}") endforeach() file(APPEND ${CREATED_QRC} "\n\t\n\n") list(APPEND QRC_FILES ${CREATED_QRC}) set(CREATED_RCC ${GCOMPRIS_RCC_DIR}/${activity}.rcc) if(Qt5Widgets_VERSION_STRING VERSION_LESS 5.4.2 OR WIN32) set(_RCC_COMMAND ${Qt5Core_RCC_EXECUTABLE} "-binary" -o ${CREATED_RCC} ${CREATED_QRC}) else() set(_RCC_COMMAND ${Qt5Core_RCC_EXECUTABLE} "-binary" -o ${CREATED_RCC} - < ${CREATED_QRC}) endif() add_custom_command(OUTPUT ${CREATED_RCC} COMMAND ${_RCC_COMMAND} DEPENDS ${QRC_CONTENTS} "${out_depends}" VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) if(CMAKE_HOST_APPLE) - install(FILES ${CREATED_RCC} DESTINATION gcompris-qt.app/Contents/MacOS/rcc) - elseif(SAILFISHOS) - install(FILES ${CREATED_RCC} DESTINATION share/harbour-gcompris-qt/rcc) + install(FILES ${CREATED_RCC} DESTINATION ${GCOMPRIS_EXECUTABLE_NAME}.app/Contents/MacOS/rcc) else() - install(FILES ${CREATED_RCC} DESTINATION share/gcompris-qt/rcc) + install(FILES ${CREATED_RCC} DESTINATION share/${GCOMPRIS_EXECUTABLE_NAME}/rcc) endif() add_custom_target( rcc_${activity} ALL DEPENDS createShareFolders ${CREATED_RCC} ${CREATED_QRC} COMMENT "Generate ${activity} RCC" SOURCES ${QRC_CONTENTS} VERBATIM ) endfunction() diff --git a/images/256-apps-gcompris-qt.png b/images/256-apps-gcompris-qt.png new file mode 100644 index 000000000..b22cb41f8 Binary files /dev/null and b/images/256-apps-gcompris-qt.png differ diff --git a/images/CMakeLists.txt b/images/CMakeLists.txt new file mode 100644 index 000000000..33d56c27a --- /dev/null +++ b/images/CMakeLists.txt @@ -0,0 +1,8 @@ +include(ECMInstallIcons) + +ecm_install_icons(ICONS + 256-apps-gcompris-qt.png + sc-apps-gcompris-qt.svgz + DESTINATION ${KDE_INSTALL_ICONDIR} + THEME hicolor +) diff --git a/images/gcompris-store-icon-300.png b/images/gcompris-store-icon-300.png new file mode 100644 index 000000000..b63db1b6d Binary files /dev/null and b/images/gcompris-store-icon-300.png differ diff --git a/images/gcompris-store-icon.svg b/images/gcompris-store-icon.svg new file mode 100644 index 000000000..52c6954f0 --- /dev/null +++ b/images/gcompris-store-icon.svg @@ -0,0 +1,627 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/gcompris-icon.svg b/images/sc-apps-gcompris-qt.svgz similarity index 100% rename from images/gcompris-icon.svg rename to images/sc-apps-gcompris-qt.svgz diff --git a/installer/GCompris-install.ico b/installer/GCompris-install.ico index 056c72faf..65a9a3bae 100644 Binary files a/installer/GCompris-install.ico and b/installer/GCompris-install.ico differ diff --git a/installer/GCompris-uninstall.ico b/installer/GCompris-uninstall.ico index 65eef0142..0ff168492 100644 Binary files a/installer/GCompris-uninstall.ico and b/installer/GCompris-uninstall.ico differ diff --git a/installer/gcompris-header.bmp b/installer/gcompris-header.bmp index 3033bfff7..c2026f41a 100644 Binary files a/installer/gcompris-header.bmp and b/installer/gcompris-header.bmp differ diff --git a/gcompris.appdata.xml b/org.kde.gcompris.appdata.xml similarity index 98% rename from gcompris.appdata.xml rename to org.kde.gcompris.appdata.xml index 859d8d804..f9abf5a9a 100644 --- a/gcompris.appdata.xml +++ b/org.kde.gcompris.appdata.xml @@ -1,843 +1,830 @@ - 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 - gcompris.desktop - gcompris.desktop - gcompris.desktop - gcompris.desktop - gcompris.desktop - gcompris.desktop - gcompris.desktop - xxgcompris.desktopxx - gcompris.desktop - gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + org.kde.gcompris.desktop + xxorg.kde.gcompris.desktopxx 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 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+ 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 لعبة «فهمت» التّعليميّة Xuegu educativu Gcompris Joc educatiu GCompris Joc educatiu GCompris GCompris-Lernspiel Εκπαιδευτικό παιχνίδι GCompris GCompris Educational Game Juego educativo GCompris GCompris, opettavainen peli Jeu éducatif GCompris Xogo educativo GCompris Gioco didattico GCompris GCompris 교육용 게임 Educatief spel GCompris GCompris leik-og-lær-spel Gra edukacyjna GCompris Jogo Educativo GCompris Jogo educacional GCompris Joc educațional GCompris Набор обучающих игр 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 لعبة تعليميّة متعدّدة الأنشطة للأطفال من سنتين إلى 10 سنوات Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys 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 Εκπαιδευτικό παιχνίδι πολλαπλών δραστηριοτήτων για ηλικίες 2 έως 10 ετών Multi-Activity Educational game for children 2 to 10 Juego educativo multiactividad para niños de 2 a 10 años Useampitoimintoinen opettavainen peli 2–10-vuotiaille lapsille 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 2-10세 어린이를 위한 다양한 활동이 있는 교육용 게임 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 com várias atividades para crianças de 2 a 10 anos Joc educațional cu activități multiple pentru copii între 2 și 10 ani Интерактивные обучающие игры для детей от 2 до 10 лет 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.

«فهمت» هو طقم برمجيّات تعليميّة يضمّ مختلف الأنشطة للأطفال من سنتين إلى 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.

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 είναι μια σουίτα εκπαιδευτικού λογισμικού με πολυάριθμες δραστηριότητες για παιδιά ηλικίας 2 έως 10 ετών.

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 on useista toiminnoista koostuva opetusohjelmisto 2–10-vuotiaille lapsille.

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는 2-10세 어린이를 위한 활동을 모아 놓은 교육용 소프트웨어 모음입니다.

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 apresenta uma série de atividades para crianças com idade entre 2 e 10 anos.

GCompris este un pachet de software educațional compus din numeroase activități pentru copii între 2 și 10 ani.

GCompris — это набор обучающих игр, рассчитанных на детей в возрасте от 2 до 10 лет.

GCompris je balík výukového softvéru zložený z rôznych aktivít pre deti od 2 do 10 rokov.

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.

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.

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.

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.

Unele activități sunt orientate pe joacă, dar totuși educative.

Некоторые из заданий представлены в игровой форме, но и они являются обучающими.

Niektoré z aktivít sú herne orientované, ale stále výukové.

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.

يمكنك أن تجد أدناه قائمة بالفئات وبعض الأنشطة الموجودة في كلّ فئة.

Embaxo pues alcontrar un llistáu d'estayes con delles de les actividaes disponibles nesta

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

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.

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

Abaixo está relacionada uma lista de categorias com algumas das atividades disponíveis em cada uma delas.

Dedesubt puteți găsi o listă de categorii cu unele din activitățile disponibile în acea categorie.

Ниже представлен список категорий с доступными в этих категориях заданиями.

Tu môžete nájsť zoznam kategórií s niektorými aktivitami dostupnými v kategórii.

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

下面列出了一些分类和对应分类中的活动。

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

  • computer discovery: keyboard, mouse, different mouse gestures, ...
  • استكشاف الحاسوب: لوحة المفاتيح، الفأرة، مختلف إيماءات الفأرة، وغيرها
  • descobrir l'ordinador: teclat, ratolí, diferents gestos del ratolí...
  • descobrir l'ordinador: teclat, ratolí, diferents gestos del ratolí...
  • Entdeckung des Computers: Tastatur, Maus, verschiedene Mausgesten ...
  • ανακαλύπτω τον υπολογιστή: πληκτρολόγιο, ποντίκι, διάφορες ενδείξεις δείκτη ποντικιού, ...
  • computer discovery: keyboard, mouse, different mouse gestures, ...
  • descubrimiento del ordenador: teclado, ratón, distintos gestos con el ratón...
  • 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.
  • scoperta del computer: tastiera, mouse, vari gesti con il mouse, ...
  • 컴퓨터와 친해지기: 키보드, 마우스, 마우스 제스처, ...
  • ontdekken van de computer: toetsenbord, muis, verschillende muisbewegingen, ...
  • datamaskin: tastatur, mus, ulike muserørsler, …
  • odkrywanie komputera: klawiatura, mysz, różne ruchy myszą, ...
  • descoberta do computador: teclado, rato, os diferentes gestos com o rato, ...
  • conhecendo o computador: teclado, mouse, diferentes movimentações com o mouse, ...
  • descoperirea calculatorului: tastatura, mausul, diferite gesturi cu mausul, ...
  • знакомство с компьютером: клавиатура, мышь, различные жесты мышью, ...
  • objavovanie počítača: klávesnica, myš, rôzne gestá myši...
  • delo z računalnikom: tipkovnica, miška, kretnje miške, ...
  • upptäcka datorn: tangentbord, mus, olika musgester, ...
  • Знайомство з комп’ютером: клавіатура, миша, керування мишею…
  • xxcomputer discovery: keyboard, mouse, different mouse gestures, ...xx
  • 探索电脑:键盘、鼠标、不同的鼠标手势……
  • 電腦探索:鍵盤、滑鼠、不同的滑鼠手勢等
  • arithmetic: table memory, enumeration, mirror image, balance the scale, change giving, ...
  • aritmètica: memoritzar la taula, enumeració, imatge al mirall, equilibrar la balança, donar el canvi...
  • aritmètica: memoritzar la taula, enumeració, imatge al mirall, equilibrar la balança, donar el canvi...
  • Arithmetik: Kombitabellen, Aufzählungen, Bilder spiegeln, Gewichte ausgleichen, Wechselgeld geben...
  • αριθμητική: μνημονικός πίνακας, απαρίθμηση, κάτοπτρο, ισορροπώ τη ζυγαριά, δίνω ρέστα, ...
  • arithmetic: table memory, enumeration, mirror image, balance the scale, change giving, ...
  • aritmética: memorización de tablas, enumeración, imagen especular, equilibrar la balanza, devolver cambios...
  • aritmetiikka: kertotaulujen opettelu, laskutehtävät, peilikuvan piirtäminen, vaa’an tasapainottaminen, vaihtorahan antaminen, …
  • arithmétique : apprentissage des tables d'opérations mathématiques, l'énumération, de symétrie d'image, équilibrage de la balance, rendre la monnaie…
  • Aritmética: táboas de memoria, enumeración, imaxes espello, equilibrio de balanzas, cálculo do cambio, etc.
  • aritmetica: tabelline, enumerazione, immagine speculare, allineare la bilancia, dare il resto, ...
  • 산술 연산: 표 기억하기, 배열하기, 그림 뒤집기, 저울 맞추기, 거스름돈 계산하기, ...
  • rekenen: tafels oefenen, reeksen, afbeelding spiegelen, de schaal in evenwicht brengen, wijziging gegeven, ...
  • rekning: gongetabellen¸teljing, spegelbilete, måling av vekt, vekslepengar, …
  • arytmetyka: tablice pamięciowe, wyliczanie, obraz lustrzany, wyrównoważanie wagi, wydawanie reszty, ...
  • aritmética: memória da tabuada, enumeração, imagem-espelho, equilíbrio de balanças, trocos, ...
  • matemática: memória matemática, enumeração, imagens espelhadas, balanceamento de escalas, moedas e troco, ...
  • aritmetică: tabla înmulțirii, enumerări, imagini în oglindă, echilibrează balanța, darea restului, ...
  • арифметика: игра «память» с подсчётом, счёт, отражение рисунка, уравновешивание весов, подсчёт сдачи, ...
  • aritmetické: tabuľková pamäť, výpočet, zrkalový obrázok, vyváženie mierky, zmena dávky...
  • računstvo: spomin z računi, štetje, uravnoteži tehtnico, vračanje drobiža, ...
  • aritmetik: tabellminne, uppräkning, spegelbild, balansera vågen, ge växel, ...
  • Арифметика: запам’ятовування таблиць, нумерація, віддзеркалення, балансування масштабу, обчислення решти…
  • xxarithmetic: table memory, enumeration, mirror image, balance the scale, change giving, ...xx
  • 算数:表格记忆、枚举、镜像、天平、找零……
  • 數學運算:表格記憶、列舉、影像映射、平衡、找零計算等
  • science: the canal lock, color mixing, gravity concept, ...
  • ciència: blocar el canal, barreja de colors, el concepte de la gravetat...
  • ciència: blocar el canal, barreja de colors, el concepte de la gravetat...
  • Wissenschaft: Kanalschleuse, Farbmischung, Gravitation,...
  • επιστήμη: σύστημα αλλαγής στάθμης ροής, ανάμειξη χρωμάτων, η έννοια της βαρύτητας, ...
  • science: the canal lock, colour mixing, gravity concept, ...
  • ciencia: la esclusa de un canal, mezcla de colores, concepto de gravedad...
  • tiede: kanavasulku, värien sekoitus, painovoiman käsite…
  • science : fonctionnement d'une écluse, mélange des couleurs, concept de la gravité…
  • Ciencia: o bloqueo da canle, mestura de cores, o concepto de gravidade, etc.
  • scienza: la chiusa del canale, miscelazione dei colori, il concetto di gravità, ...
  • 과학: 운하 갑문, 색 섞기, 중력, ...
  • natuurkunde: de sluis, mengen van kleuren, concept van zwaartekracht, ...
  • vitskap: kanalsluse, blanding av fargar, tyngdekraft, …
  • nauka: śluza na kanale, mieszanie barw, poczucie grawitacji, ...
  • ciência: bloqueio de canais, misturas de cores, conceito de gravidade, ...
  • ciência: comporta de canal, mistura de cores, conceito de gravidade, ...
  • științe: podul mobil, combinarea culorilor, gravitația, ...
  • наука: работа судоходного шлюза, смешивание цветов, представление о гравитации, ...
  • veda: zamknutý kanál, miešanie farieb, koncept grvitácie...
  • znanost: zapornica kanala, mešanje barv, koncept težnosti ...
  • vetenskap: kanalslussen, färgblandning, gravitationskonceptet, ...
  • Наука: шлюзування, змішування кольорів, поняття тяжіння…
  • xxscience: the canal lock, color mixing, gravity concept, ...xx
  • 科学:运河闸门、颜料色彩混合、重力的概念……
  • 科學:顏色混合、重力觀念、運河鎖等等
  • games: memory, connect 4, tic tac toe, sudoku, hanoi tower, ...
  • jocs: memòria, connectar 4, tres en ratlla, sudoku, torre de Hanoi...
  • jocs: memòria, connectar 4, tres en ratlla, sudoku, torre de Hanoi...
  • Spiele: Memory, Vier gewinnt, Tic-Tac-Toe, Sudoku, Türme von Hanoi,...
  • παιχνίδια: μνήμη, τετράδες, τρίλιζα, σουντόκου, πύργος του Ανόι, ...
  • games: memory, connect 4, tic tac toe, sudoku, hanoi tower, ...
  • juegos: memoria, conectar 4, tres en raya, sudoku, torres de hanoi...
  • pelit: muisti, neljän suora, ristinolla, sudoku, Hanoin tornit…
  • jeux: trouve les paires, puissance 4, morpion, sudoku, la tour d'hanoï…
  • Xogos: memoria, conectar 4, pai nai fillo, sudoku, torre de Hanoi, etc.
  • giochi: memory, forza 4, filetto, sudoku, torre di hanoi, ...
  • 게임: 메모리 게임, 4개 연결하기, 삼목, 수도쿠, 하노이 탑, ...
  • spellen: geheugenspel, vier verbinden, tic-tac-toe, sudoku, torens van hanoi, ...
  • spel: hugsespel, fire på rad, bondesjakk, sudoku, tårnet i Hanoi, …
  • gry: na pamięć, łączenie czwórek, tic tac toe, sudoku, wieża hanoi, ...
  • jogos: memória, 4 em linha, jogo do galo, sudoku, torres de Hanói, ...
  • jogos: memória, ligue 4, jogo da velha, sudoku, torre de Hanoi, ...
  • jocuri: memorie, leagă 4, X și 0, sudoku, turnul hanoi, ...
  • игры: память, соедини 4, крестики-нолики, судоку, Ханойская башня, ...
  • hry: pamäť, spojenie 4, tic tac toe, sudoku, hanojská veža...
  • igre: spomin, štiri v vrsto, križci in krožci, sudoku, Hanojski stolpi, ...
  • spel: memory, koppla 4, tre-i-rad, sudoku, tornen i Hanoi, ...
  • Ігри: запам’ятовування, чотири-у-рядок, хрестики-нулики, судоку, ханойські вежі…
  • xxgames: memory, connect 4, tic tac toe, sudoku, hanoi tower, ...xx
  • 游戏:记忆、四子棋、井子棋、数独、汉诺塔……
  • 遊戲:記憶遊戲、四子棋、井字遊戲、數獨、河內塔等等
  • reading: reading practice, ...
  • llectura: práutica de llectura...
  • lectura: practicar la lectura...
  • lectura: practicar la lectura...
  • Lesen: Leseübungen ...
  • ανάγνωση: εξάσκηση στην ανάγνωση, ...
  • reading: reading practice, ...
  • lectura: prácticas de lectura...
  • lukeminen: lukemisen harjoittelu…
  • lecture : entraînement à la lecture…
  • Lectura: práctica de lectura, etc.
  • lettura: esercitare la lettura, ...
  • 읽기: 읽기 연습, ...
  • lezen: lezen oefenen, ...
  • lesing: leseøvingar, …
  • czytanie: nauka czytania, ...
  • leitura: exercícios de leitura, ...
  • leitura: prática de leitura, ...
  • citire: exerciții de citire, ...
  • чтение: упражнение в чтении, ...
  • čítanie: precvičovanie čítania...
  • branje: bralna vaja, ...
  • läsning: läsningsövning, ...
  • Читання: вправи із читання…
  • xxreading: reading practice, ...xx
  • 阅读:阅读练习……
  • 閱讀:閱讀練習等等
  • other: learn to tell time, the braille system, maze, music instruments, ...
  • أخرى: تعلّم الإخبار عن الوقت، نظام بريل، المتاهة، الآلات الموسيقيّة، وغيرها
  • altres: aprendre a dir l'hora, el sistema braille, laberint, instruments musicals...
  • altres: aprendre a dir l'hora, el sistema braille, laberint, instruments musicals...
  • Sonstiges: Uhrzeit, Braille-System, Labyrinthe, Musikinstrumente ...
  • άλλα: μαθαίνω να λέω την ώρα, το σύστημα braille, λαβύρινθος, μουσικά όργανα, ...
  • other: learn to tell time, the braille system, maze, music instruments, ...
  • otras: aprender a decir la hora, el sistema braille, laberintos, instrumentos musicales...
  • muuta: kellonajan kertominen, Braille-järjestelmä, sokkelo, soittimet…
  • 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.
  • altro: impara a leggere l'ora, il sistema braille, labirinto, strumenti musicali, ...
  • 기타: 시간 읽기, 점자, 미로, 악기, ...
  • overig: leren klokkijken, het braille-systeem, doolhof, muziekinstrumenten, ...
  • anna: lær klokka, lær blindeskrift, labyrint, musikkinstrument, …
  • inne: naucz się godzin na zegarze, systemu brajla, labiryntów, instrumentów muzycznych, ...
  • outros: aprender a dizer as horas, o sistema Braille, labirintos, instrumentos musicais, ...
  • outros: aprendendo a ver as horas, o sistema Braille, labirintos, instrumentos musicais, ...
  • altele: învață să citești ceasul, sistemul braille, labirint, instrumente muzicale, ...
  • другое: определение времени по часам, шрифт Брайля, лабиринт, музыкальные инструменты, ...
  • iné: ako povedať čas, braillov systém, bludisko, hudobná nástroje...
  • ostalo: prepoznavanje časa, brajica, blodnjak, glasbila, ...
  • annat: lära sig klockan, punktskrift, labyrint, musikinstrument, ...
  • Інше: навчання позначенням часу, система Брайля, лабіринти, музичні інструменти…
  • xxother: learn to tell time, the braille system, maze, music instruments, ...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.

توفّر «فهمت» حاليًّا أكثر من 100 نشاط وثمّة غيرها يجري تطويرها. «فهمت» برمجيّة حرّة، هذا يعني أنّك تستطيع تطويعها حسب احتياجك، وكذلك تطويرها، والأهم من ذلك هو مشاركتها مع الأطفال في كلّ مكان.

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.

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.

Προς το παρόν το GCompris προσφέρει περισσότερες από 100 δραστηριότητες και αναπτύσσονται και άλλες. Το GCompris είναι ελεύθερο λογισμικό, το οποίο σημαίνει ότι μπορείτε να το προσαρμόσετε στις ανάγκες σας, να το βελτιώσετε, και, το σπουδαιότερο, να το μοιραστείτε με παιδιά από όλον τον κόσμο.

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.

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

GCompris는 100개 이상의 활동을 포함하고 있으며 더 많은 활동을 개발하고 있습니다. GCompris는 자유 소프트웨어이며, 필요에 따라서 활동을 개선할 수 있으며 전 세계의 사람들과 공유할 수 있습니다.

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.

Atualmente o GCompris oferece mais de 100 atividades e outras mais estão sendo desenvolvidas. O GCompris é um software livre, o que significa que você pode adaptá-lo para as suas próprias necessidades, melhorá-lo e, mais importante, compartilhar com as crianças de todo o mundo.

Momentan GCompris oferă peste 100 de activități și multe altele sunt în lucru. GCompris este software liber, ceea ce înseamnă că poate fi adaptat nevoilor dumneavoastră, îmbunătățit, dar mai ales, partajat cu copii de pretutindeni.

В настоящее время GCompris содержит более 100 упражнений, и новые находятся в разработке. GCompris — свободное ПО, и это значит, что вы можете приспособить его для своих нужд, улучшить, а самое главное — поделиться им с детьми во всём мире.

Aktuálne GCompris ponúka vyše 100 aktivít a ďalšie sa vyvíjajú. GCompris je slobodný softvér, čo znamená, že si ho môžete prispôsobiť na vlastné potreby, zlepšiť, a hlavne zdieľať s deťmi všade.

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 是自由软件,这意味着你可以根据你的需要进行调整、改进,以及最重要的一点,和世界各地的孩子们分享。

目前 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 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/ 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 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-nn.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-nn.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-nn.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 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 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 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 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 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 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/ 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 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 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 4812444ca..d34d29617 100644 --- a/org.kde.gcompris.desktop +++ b/org.kde.gcompris.desktop @@ -1,96 +1,97 @@ [Desktop Entry] Name=GCompris Educational Game Name[ar]=لعبة «فهمت» التّعليميّة Name[ast]=Xuegu educativu Gcompris Name[ca]=Joc educatiu GCompris Name[ca@valencia]=Joc educatiu GCompris Name[cs]=Výuková hra GCompris Name[de]=GCompris-Lernspiel Name[el]=Εκπαιδευτικό παιχνίδι GCompris Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris Name[fi]=GCompris, opettavainen peli Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris Name[it]=Gioco didattico GCompris Name[ko]=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[ru]=Набор обучающих игр GCompris Name[sk]=Výuková hra GCompris Name[sl]=Izobraževalna igra GCompris Name[sv]=GCompris pedagogiskt spel Name[tr]=GCompris Eğitici Oyun Name[uk]=Освітня гра GCompris Name[x-test]=xxGCompris Educational Gamexx Name[zh_CN]=GCompris 教育游戏 Name[zh_TW]=GCompris 教育遊戲 GenericName=Educational game GenericName[ar]=لعبة تعليميّة GenericName[ast]=Xuegu educativu GenericName[ca]=Joc educatiu GenericName[ca@valencia]=Joc educatiu GenericName[cs]=Výuková hra +GenericName[da]=Læringsspil GenericName[de]=Lernspiel GenericName[el]=Εκπαιδευτικό παιχνίδι GenericName[en_GB]=Educational game GenericName[es]=Juego educativo GenericName[fi]=Opettavainen peli GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo GenericName[it]=Gioco didattico GenericName[ko]=교육용 게임 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[ru]=Обучающие игры GenericName[sk]=Výuková hra GenericName[sl]=Izobraževalna igra GenericName[sv]=Pedagogiskt spel GenericName[tr]=Eğitici oyun GenericName[uk]=Освітня гра GenericName[x-test]=xxEducational gamexx GenericName[zh_CN]=教育游戏 GenericName[zh_TW]=教育遊戲 Comment=Multi-Activity Educational game for children 2 to 10 Comment[ar]=لعبة تعليميّة متعدّدة الأنشطة للأطفال من سنتين إلى 10 سنوات Comment[ca]=Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys Comment[ca@valencia]=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[el]=Εκπαιδευτικό παιχνίδι πολλαπλών δραστηριοτήτων για ηλικίες 2 έως 10 ετών 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[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. Comment[it]=Gioco didattico multi-attività per bambini da 2 a 10 anni Comment[ko]=2-10세 어린이를 위한 다양한 활동이 있는 교육용 게임 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 com várias atividades para crianças de 2 a 10 anos Comment[ro]=Joc educațional cu activități multiple pentru copii între 2 și 10 ani Comment[ru]=Обучающие игры для детей от 2 до 10 лет 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[tr]=2-10 yaş arası çocuklar için Çoklu Etkileşimli Eğitici oyun 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/flatpak/README b/platforms/flatpak/README new file mode 100644 index 000000000..448b08f03 --- /dev/null +++ b/platforms/flatpak/README @@ -0,0 +1,55 @@ +# Documentation of a way to build a flatpak + +First install flatpak as documented on http://flatpak.org/ + +This approach is based on the ability of GCompris on linux to be build +as a standalone. It will thus package the libraries comming from the +Qt version used at GCompris build time. Latter on if flatpak is +successful we can expect that there will be a Qt flatpak runtine to +use instead. + +# Build GCompris to be ready for bunding +cd ~/Projets/gcompris/gcompris-kde +cd build +cmake -DBUILD_STANDALONE=True .. +make +make package + +# Prepare the flatpak +cd ~/Projets/gcompris/flatpak +mkdir gcompris +mkdir gcompris/export +mkdir gcompris/files +rsync -a ~/Projets/gcompris/gcompris-kde/build/_CPack_Packages/Linux/STGZ/gcompris-qt-0.60-Linux/ gcompris/files +cp ~/Projets/gcompris/gcompris-kde/gcompris-appdata.xml gcompris/export/net.gcompris.GCompris.appdata.xml + +echo '[Application] +name=net.gcompris.GCompris +runtime=org.freedesktop.Platform/x86_64/1.4 +command=gcompris-qt.sh + +[Context] +shared=network;ipc; +sockets=x11;wayland;pulseaudio;session-bus; +devices=dri; +filesystems=host;' > gcompris/metadata + +# Build the flatpak +flatpak build-export flatpak-repo gcompris +flatpak build-update-repo --title="GCompris" flatpak-repo + +# Test it locally +flatpak --user remote-add --no-gpg-verify gcompris-repo flatpak-repo +flatpak --user install gcompris-repo net.gcompris.GCompris +flatpak run net.gcompris.GCompris +flatpak --user remote-delete gcompris-repo + +# Upload the flatpak +rsync -az flatpak-repo gcompris.net:/var/www/ + +# Test it from the remote +flatpak --user remote-add --no-gpg-verify gcompris-repo http://gcompris.net/flatpak-repo +flatpak --user install gcompris-repo net.gcompris.GCompris +flatpak run net.gcompris.GCompris + + diff --git a/platforms/sailfishOS/harbour-gcompris-qt.desktop b/platforms/sailfishOS/harbour-gcompris-qt.desktop index 6795c4b5a..e0625ffe0 100644 --- a/platforms/sailfishOS/harbour-gcompris-qt.desktop +++ b/platforms/sailfishOS/harbour-gcompris-qt.desktop @@ -1,96 +1,97 @@ [Desktop Entry] Name=GCompris Educational Game Name[ar]=لعبة «فهمت» التّعليميّة Name[ast]=Xuegu educativu Gcompris Name[ca]=Joc educatiu GCompris Name[ca@valencia]=Joc educatiu GCompris Name[cs]=Výuková hra GCompris Name[de]=GCompris-Lernspiel Name[el]=Εκπαιδευτικό παιχνίδι GCompris Name[en_GB]=GCompris Educational Game Name[es]=Juego educativo GCompris Name[fi]=GCompris, opettavainen peli Name[fr]=Jeu éducatif GCompris Name[gl]=Xogo educativo GCompris Name[it]=Gioco didattico GCompris Name[ko]=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[ru]=Набор обучающих игр GCompris Name[sk]=Výuková hra GCompris Name[sl]=Izobraževalna igra GCompris Name[sv]=GCompris pedagogiskt spel Name[tr]=GCompris Eğitici Oyun Name[uk]=Освітня гра GCompris Name[x-test]=xxGCompris Educational Gamexx Name[zh_CN]=GCompris 教育游戏 Name[zh_TW]=GCompris 教育遊戲 GenericName=Educational game GenericName[ar]=لعبة تعليميّة GenericName[ast]=Xuegu educativu GenericName[ca]=Joc educatiu GenericName[ca@valencia]=Joc educatiu GenericName[cs]=Výuková hra +GenericName[da]=Læringsspil GenericName[de]=Lernspiel GenericName[el]=Εκπαιδευτικό παιχνίδι GenericName[en_GB]=Educational game GenericName[es]=Juego educativo GenericName[fi]=Opettavainen peli GenericName[fr]=Jeu éducatif GenericName[gl]=Xogo educativo GenericName[it]=Gioco didattico GenericName[ko]=교육용 게임 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[ru]=Обучающие игры GenericName[sk]=Výuková hra GenericName[sl]=Izobraževalna igra GenericName[sv]=Pedagogiskt spel GenericName[tr]=Eğitici oyun GenericName[uk]=Освітня гра GenericName[x-test]=xxEducational gamexx GenericName[zh_CN]=教育游戏 GenericName[zh_TW]=教育遊戲 Comment=Multi-Activity Educational game for children 2 to 10 Comment[ar]=لعبة تعليميّة متعدّدة الأنشطة للأطفال من سنتين إلى 10 سنوات Comment[ca]=Joc educatiu amb múltiples activitats per a nens dels 2 a 10 anys Comment[ca@valencia]=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[el]=Εκπαιδευτικό παιχνίδι πολλαπλών δραστηριοτήτων για ηλικίες 2 έως 10 ετών 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[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. Comment[it]=Gioco didattico multi-attività per bambini da 2 a 10 anni Comment[ko]=2-10세 어린이를 위한 다양한 활동이 있는 교육용 게임 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 com várias atividades para crianças de 2 a 10 anos Comment[ro]=Joc educațional cu activități multiple pentru copii între 2 și 10 ani Comment[ru]=Обучающие игры для детей от 2 до 10 лет 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[tr]=2-10 yaş arası çocuklar için Çoklu Etkileşimli Eğitici oyun 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/platforms/windows/prepare.sh b/platforms/windows/prepare.sh new file mode 100755 index 000000000..28f243477 --- /dev/null +++ b/platforms/windows/prepare.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Before making a Windows build we must provide the converted mp3 +# and the qm files because this is too annoying to create them on +# windows. + +if [ ! -f CMakeLists.txt ] +then + echo "ERROR: Run me from the top level project dir" + exit 1 +fi +mkdir -p build +cd build +cmake -D COMPRESSED_AUDIO=mp3 .. +make createMp3FromOgg +make BundleConvertedOggs +make getSvnTranslations +make BuildTranslations +make BundleTranslations +rsync -a ../converted_ogg_to_mp3-*.7z translations-*.7z gcompris.net:/var/www/download + +# +# Then on Windows use the targets: +# +# DlAndInstallBundledTranslations +# DlAndInstallBundledConvertedOggs +# diff --git a/src/activities/activities.txt b/src/activities/activities.txt index c87a16dcf..119cae2ec 100644 --- a/src/activities/activities.txt +++ b/src/activities/activities.txt @@ -1,126 +1,128 @@ # The list of activities that will be loaded at GCompris start. # Keep it sorted advanced_colors algebra_by algebra_div algebra_minus algebra_plus algorithm align4 align4-2players alphabet-sequence babymatch babyshapes baby_wordprocessor balancebox ballcatch braille_alphabets braille_fun canal_lock chess chess_2players chess_partyend chronos clickanddraw clickgame click_on_letter click_on_letter_up clockgame color_mix color_mix_light colors crane details drawnumber enumerate erase erase_2clic erase_clic explore_farm_animals explore_monuments explore_world_animals explore_world_music fifteen followline football geo-country geography gletters gnumch-equality gnumch-factors gnumch-inequality gnumch-multiples gnumch-primes graph-coloring guessnumber hangman hanoi hanoi_real hexagon imagename instruments intro_gravity land_safe lang leftright +letter-in-word lightsoff louis-braille magic-hat-minus magic-hat-plus maze mazeinvisible mazerelative melody memory memory-enumerate memory-math-add memory-math-add-minus memory-math-add-minus-mult-div memory-math-add-minus-mult-div-tux memory-math-add-minus-tux memory-math-add-tux memory-math-div memory-math-div-tux memory-math-minus memory-math-minus-tux memory-math-mult memory-math-mult-div memory-math-mult-div-tux memory-math-mult-tux memory-sound memory-sound-tux memory-tux memory-wordnumber mining missing-letter money money_back money_back_cents money_cents mosaic numbers-odd-even paintings penalty photo_hunter planegame readingh readingv redraw redraw_symmetrical renewable_energy reversecount +roman_numerals scalesboard scalesboard_weight scalesboard_weight_avoirdupois simplepaint smallnumbers smallnumbers2 sudoku superbrain tangram target tic_tac_toe tic_tac_toe_2players traffic watercycle wordsgame diff --git a/src/activities/algebra_by/resource/background.svg b/src/activities/algebra_by/resource/background.svg index 9143e30d0..e6eb76e22 100644 --- a/src/activities/algebra_by/resource/background.svg +++ b/src/activities/algebra_by/resource/background.svg @@ -1,381 +1,381 @@ image/svg+xml + d="m 2597.5885,31.686828 c -0.4738,0.0103 -0.9613,0.0476 -1.4376,0.0937 -15.3423,2.08952 -25.1989,13.63509 -35.5,22.34375 18.7766,15.03331 -11.1134,6.3822 -18.25,19.90625 -15.5282,13.16182 -30.1945,10.7338 -48.5,14.375 -2.9271,8.96205 25.1217,10.81587 4.7813,11.5625 -8.5501,-3.03184 -38.4431,-23.37395 -44.4687,-2.8125 0.9204,5.474362 -11.7863,-30.42312 -28.9376,-24.75 -23.7734,-7.15551 -36.6458,25.1795 -57.25,8.0625 -15.2867,9.64632 -29.4922,7.47896 -48.0624,4.40625 35.8886,-16.60255 -20.9773,-16.39695 -19.8126,-20 3.3816,-30.8459 -40.7456,-28.39007 -53.2812,-12.5 -11.9518,0.93142 -46.3707,7.57198 -25.6875,20.5 -21.2651,3.48593 -15.8468,35.010372 -41.0313,25.5 -4.499,-0.50481 -20.8248,-17.02008 -27.2187,-0.21875 -10.587,-7.66717 -14.6176,-6.20097 -24.75,-20.34375 -21.6987,-12.04587 -37.7374,10.32266 -38.25,27.906252 -17.9418,2.78942 -6.5093,30.04725 -20.8437,9.53125 -24.3999,-17.424122 -50.7025,13.6084 -36.9376,23.59375 -18.471,8.53472 16.4925,22.8784 28.125,18.75 64.4827,6.97184 744.9812,11.87119 756.9165,-4.625 54.6875,-87.618937 -29.9549,-69.844371 -69.0102,-59.593752 -26.4353,-0.0325 -46.7626,-18.9224 -74.375,-13.6875 -19.34,-5.94827 -31.9324,33.481112 -36.0313,5.6875 -20.865,-4.54434 -16.0612,-19.72918 -31.9374,-30.40625 19.3907,-7.1265 6.4355,-23.60086 -8.25,-23.28125 z m -285.7813,53.8125 c 0.2018,0.003 0.4993,0.10476 0.9375,0.375 -0.7398,1.50079 -1.8119,-0.38676 -0.9375,-0.375 z m -161.0937,4.21875 c -1.517,2.42715 1.5168,2.4276 0,0 z m 402.8437,5.46875 c 2.0277,0.0172 -0.6767,0.96601 0,0 z m -75.125,3.9375 c 13.0018,8.610272 -24.4527,11.052052 -20.4687,10.468752 12.0949,-9.5755 -3.8803,-8.67788 20.4687,-10.468752 z m -301.25,4.968752 c 10.1824,1.70592 -4.624,7.86096 0,0 z" + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#67be5f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" /> diff --git a/src/activities/baby_wordprocessor/BabyWordprocessor.qml b/src/activities/baby_wordprocessor/BabyWordprocessor.qml index 47ac16a78..4be3cbb27 100644 --- a/src/activities/baby_wordprocessor/BabyWordprocessor.qml +++ b/src/activities/baby_wordprocessor/BabyWordprocessor.qml @@ -1,260 +1,261 @@ /* GCompris - baby_wordprocessor.qml * * Copyright (C) 2015 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * 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.1 import GCompris 1.0 import QtQuick.Controls 1.0 import "../../core" ActivityBase { id: activity onStart: focus = true onStop: {} pageComponent: Rectangle { id: background anchors.fill: parent color: 'white' signal start signal stop Component.onCompleted: { activity.start.connect(start) } onStart: { keyboard.populate(); edit.forceActiveFocus(); } Column { id: controls width: 200 * ApplicationInfo.ratio anchors { right: parent.right top: parent.top bottom: bar.top margins: 10 } spacing: 10 Button { style: GCButtonStyle {} height: 30 * ApplicationInfo.ratio width: parent.width text: qsTr("Title") onClicked: edit.formatLineWith('h2') } Button { style: GCButtonStyle {} height: 30 * ApplicationInfo.ratio width: parent.width text: qsTr("Subtitle") onClicked: edit.formatLineWith('h3') } Button { style: GCButtonStyle {} height: 30 * ApplicationInfo.ratio width: parent.width text: qsTr("Paragraph") onClicked: edit.formatLineWith('p') } } Flickable { id: flick anchors { left: parent.left right: controls.left top: parent.top bottom: bar.top margins: 10 } contentWidth: edit.paintedWidth contentHeight: edit.paintedHeight clip: true flickableDirection: Flickable.VerticalFlick function ensureVisible(r) { if (contentX >= r.x) contentX = r.x; else if (contentX+width <= r.x+r.width) contentX = r.x+r.width-width; if (contentY >= r.y) contentY = r.y; else if (contentY+height <= r.y+r.height) contentY = r.y+r.height-height; } TextEdit { id: edit width: flick.width height: flick.height focus: true wrapMode: TextEdit.Wrap onCursorRectangleChanged: flick.ensureVisible(cursorRectangle) textFormat: TextEdit.RichText font { pointSize: (18 + ApplicationSettings.baseFontSize) * ApplicationInfo.fontRatio capitalization: ApplicationSettings.fontCapitalization weight: Font.DemiBold family: GCSingletonFontLoader.fontLoader.name letterSpacing: ApplicationSettings.fontLetterSpacing wordSpacing: 10 } cursorDelegate: Rectangle { id: cursor width: 10 // height should be set automatically as mention in cursorRectangle property // documentation but it does not work height: parent.cursorRectangle.height color: 'red' SequentialAnimation on opacity { running: true loops: Animation.Infinite PropertyAnimation { to: 0.2 duration: 1000 } PropertyAnimation { to: 1 duration: 1000 } } } function insertText(text) { edit.insert(cursorPosition, text) } function backspace() { if(cursorPosition > 0) { moveCursorSelection(cursorPosition - 1, TextEdit.SelectCharacters) cut() } } function formatLineWith(tag) { var text = getText(0, length) var initialPosition = cursorPosition var first = cursorPosition - 1 for(; first >= 0; first--) { if(text.charCodeAt(first) === 8233) break } first++ var last = cursorPosition for(; last < text.length; last++) { if(text.charCodeAt(last) === 8233) break } var line = getText(first, last) remove(first, last) insert(first, '<' + tag + '>' + line + '') cursorPosition = initialPosition } } } DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar anchors.bottom: keyboard.top content: BarEnumContent { value: help | home | reload } onHelpClicked: { displayDialog(dialogHelp) } onHomeClicked: activity.home() onReloadClicked: edit.text = '' } VirtualKeyboard { id: keyboard anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter width: parent.width + visible: ApplicationSettings.isVirtualKeyboard && !ApplicationInfo.isMobile onKeypress: { if(text == backspace) edit.backspace() else edit.insertText(text) } onError: console.log("VirtualKeyboard error: " + msg); function populate() { layout = [ [ { label: "0" }, { label: "1" }, { label: "2" }, { label: "3" }, { label: "4" }, { label: "5" }, { label: "6" }, { label: "7" }, { label: "8" }, { label: "9" } ], [ { label: "A" }, { label: "B" }, { label: "C" }, { label: "D" }, { label: "E" }, { label: "F" }, { label: "G" }, { label: "H" }, { label: "I" } ], [ { label: "J" }, { label: "K" }, { label: "L" }, { label: "M" }, { label: "N" }, { label: "O" }, { label: "P" }, { label: "Q" }, { label: "R" } ], [ { label: "S" }, { label: "T" }, { label: "U" }, { label: "V" }, { label: "W" }, { label: "X" }, { label: "Y" }, { label: "Z" }, { label: " " }, { label: backspace } ] ] } } } } diff --git a/src/activities/explore_monuments/resource/board/board1.qml b/src/activities/explore_monuments/resource/board/board1.qml index 4ab768a6c..888f3c6cc 100644 --- a/src/activities/explore_monuments/resource/board/board1.qml +++ b/src/activities/explore_monuments/resource/board/board1.qml @@ -1,115 +1,115 @@ /* GCompris * * Copyright (C) 2015 Ayush Agrawal * * Authors: * Bruno Coudoin (GTK+ version) * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/worldbg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Chichén Itzá"), "text": qsTr("Chichen Itza, meaning “at the mouth of the Itza well”, is a Mayan City on the Yucatan Peninsula in Mexico, between Valladolid and Merida. It was established before the period of Christopher Colombus and probably served as the religion center of Yucatan for a while."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/chichenItza.jpg", "text2": qsTr("Chichén Itzá"), - "x" : "0.206", - "y" : "0.498", - "height" : "0.07", - "width" : "0.07" + "x": "0.206", + "y": "0.498", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Colosseum"), "text": qsTr("The Colosseum or Coliseum is today the most recognizable of Rome's Classical buildings. Even 2,000 years after it was built, and despite centuries when the abandoned building was pillaged for building materials, it is instantly recognizable as a classical template for the stadia of today. It was the first permanent amphitheatre to be raised in Rome, and the most impressive arena the Classical world had yet seen."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/colosseum.jpg", "text2": qsTr("Colosseum"), - "x" : "0.514", - "y" : "0.406", - "height" : "0.07", - "width" : "0.07" + "x": "0.514", + "y": "0.406", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Christ the Redeemer"), "text": qsTr("Christ the Redeemer is an Art Deco statue of Jesus Christ in Rio de Janeiro, Brazil. A symbol of Christianity across the world, the statue has also become a cultural icon of both Rio de Janeiro and Brazil."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/christTheRedeemer.jpg", "text2": qsTr("Christ the Redeemer"), - "x" : "0.351", - "y" : "0.628", - "height" : "0.07", - "width" : "0.07" + "x": "0.351", + "y": "0.628", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("The Great Wall of China"), "text": qsTr("The Great Wall, was listed as a World Heritage by UNESCO in 1987. Just like a gigantic dragon, it winds up and down across deserts, grasslands, mountains and plateaus, stretching approximately 13,170 miles (21,196 kilometers) from east to west of China."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/greatWallofChina.jpg", "text2": qsTr("The Great Wall of China"), - "x" : "0.765", - "y" : "0.445", - "height" : "0.07", - "width" : "0.07" + "x": "0.765", + "y": "0.445", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Machu Picchu"), "text": qsTr("Machu Picchu stands 2,430 m above sea-level, in the middle of a tropical mountain forest, in an extraordinarily beautiful setting. It was probably the most amazing urban creation of the Inca Empire at its height; its giant walls, terraces and ramps seem as if they have been cut naturally in the continuous rock escarpments. The natural setting, on the eastern slopes of the Andes, encompasses the upper Amazon basin with its rich diversity of flora and fauna."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/machuPicchu.jpg", "text2": qsTr("Machu Picchu"), - "x" : "0.267", - "y" : "0.598", - "height" : "0.07", - "width" : "0.07" + "x": "0.267", + "y": "0.598", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Petra"), "text": qsTr("Petra is a historical and archaeological city in the southern Jordanian governorate of Ma'an that is famous for its rock-cut architecture and water conduit system. Established possibly as early as 312 BC as the capital city of the Arab Nabataeans, it is a symbol of Jordan, as well as Jordan's most-visited tourist attraction."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/petra.jpg", "text2": qsTr("Petra"), - "x" : "0.586", - "y" : "0.462", - "height" : "0.07", - "width" : "0.07" + "x": "0.586", + "y": "0.462", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Taj Mahal, India"), - "text": qsTr("The Taj Mahal is a white marble mausoleum located on the southern bank of the Yamuna River in the Indian city of Agra. It was commissioned in 1632 by the Mughal emperor Shah Jahan reigned to house the tomb of his favorite wife of three, Mumtaz Mahal."), + "text": qsTr("The Taj Mahal is a white marble mausoleum located on the southern bank of the Yamuna River in the Indian city of Agra. It was commissioned in 1632 by the Mughal emperor Shah Jahan reigned to house the tomb of his favorite wife of three, Mumtaz Mahal."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/tajMahal.jpg", "text2": qsTr("Taj Mahal"), - "x" : "0.692", - "y" : "0.471", - "height" : "0.07", - "width" : "0.07" + "x": "0.692", + "y": "0.471", + "height": "0.07", + "width": "0.07" } ] property var instructions : [ { - "text": qsTr("The 7 Wonders of World.") + "text": qsTr("The 7 New Wonders of World.") }, { - "text": qsTr("Click on location where the given Monument is located.") + "text": qsTr("Click on location where the given monument is located.") } ] } diff --git a/src/activities/explore_monuments/resource/board/board2.qml b/src/activities/explore_monuments/resource/board/board2.qml index 972a99fcd..844894db7 100644 --- a/src/activities/explore_monuments/resource/board/board2.qml +++ b/src/activities/explore_monuments/resource/board/board2.qml @@ -1,169 +1,169 @@ /* GCompris * * Copyright (C) 2015 Ayush Agrawal * * Authors: * Bruno Coudoin (GTK+ version) * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/india/indiabg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Golden Temple"), "text": qsTr("The Golden Temple Amritsar India (Sri Harimandir Sahib Amritsar) is not only a central religious place of the Sikhs, but also a symbol of human brotherhood and equality. Everybody, irrespective of cast, creed or race can seek spiritual solace and religious fulfillment without any hindrance. It also represents the distinct identity, glory and heritage of the Sikhs. To pen-down the philosophy, ideology, the inner and outer beauty, as well as the historical legacy of Sri Harimandir Sahib is a momentous task. It is a matter of experience rather than a of description."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/goldenTemple.jpg", "text2" : qsTr("Golden Temple"), - "x" : "0.256", - "y" : "0.206", - "height" : "0.07", - "width" : "0.07" + "x": "0.256", + "y": "0.206", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Hawa Mahal"), "text": qsTr("Hawa Mahal, is a palace in Jaipur, India, so named because it was essentially a high screen wall built so the women of the royal household could observe street festivals while unseen from the outside. Constructed of red and pink sandstone, the palace sits on the edge of the City Palace, and extends to the zenana, or women's chambers."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/hawaMahal.jpg", "text2" : qsTr("Hawa Mahal"), - "x" : "0.230", - "y" : "0.290", - "height" : "0.07", - "width" : "0.07" + "x": "0.230", + "y": "0.290", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Taj Mahal"), - "text": qsTr("The Taj Mahal is a white marble mausoleum located on the southern bank of the Yamuna River in the Indian city of Agra. It was commissioned in 1632 by the Mughal emperor Shah Jahan reigned to house the tomb of his favorite wife of three, Mumtaz Mahal."), + "text": qsTr("The Taj Mahal is a white marble mausoleum located on the southern bank of the Yamuna River in the Indian city of Agra. It was commissioned in 1632 by the Mughal emperor Shah Jahan reigned to house the tomb of his favorite wife of three, Mumtaz Mahal."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/tajMahal.jpg", "text2" : qsTr("Taj Mahal"), - "x" : "0.416", - "y" : "0.298", - "height" : "0.07", - "width" : "0.07" + "x": "0.416", + "y": "0.298", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Gateway of India"), "text": qsTr("The Gateway of India is one of India's most unique landmarks situated in the city of Mumbai. The colossal structure was constructed in 1924. Located at the tip of Apollo Bunder, the gateway overlooks the Mumbai harbor, bordered by the Arabian Sea in the Colaba district. The Gateway of India is a monument that marks India's chief ports and is a major tourist attraction for visitors who arrive in India for the first time."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/gatewayofIndia.jpg", "text2" : qsTr("Gateway of India"), - "x" : "0.179", - "y" : "0.540", - "height" : "0.07", - "width" : "0.07" + "x": "0.179", + "y": "0.540", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Great Stupa"), "text": qsTr("The Great Stupa at Sanchi is the oldest stone structure in India and was originally commissioned by the emperor Ashoka the Great in the 3rd century BCE. Its nucleus was a simple hemispherical brick structure built over the relics of the Buddha. It was crowned by the chatra, a parasol-like structure symbolizing high rank, which was intended to honor and shelter the relics."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/greatStupa.jpg", "text2" : qsTr("Great Stupa"), - "x" : "0.329", - "y" : "0.396", - "height" : "0.07", - "width" : "0.07" + "x": "0.329", + "y": "0.396", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Ajanta Caves"), - "text": qsTr("AJANTA is world's greatest historical monument recognized by UNESCO located just 55kms from Jalgaon city and 105kms from Aurangabad City of Maharashtra, India. There are 30 caves in Ajanta of which 9, 10, 19, 26 and 29 are chaitya-grihas and the rest are monasteries."), + "text": qsTr("Ajanta is world's greatest historical monument recognized by UNESCO located just 55kms from Jalgaon city and 105kms from Aurangabad City of Maharashtra, India. There are 30 caves in Ajanta of which 9, 10, 19, 26 and 29 are chaitya-grihas and the rest are monasteries."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/ajantaCave.jpg", "text2" : qsTr("Ajanta Caves"), - "x" : "0.304", - "y" : "0.502", - "height" : "0.07", - "width" : "0.07" + "x": "0.304", + "y": "0.502", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Konark Sun Temple"), "text": qsTr("The Konark Sun Temple (also spelled Konarak) is a 13th-century Hindu temple dedicated to the Sun god. Shaped like a giant chariot, the temple is known for the exquisite stone carvings that cover the entire structure."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/konarkSunTemple.jpg", "text2" : qsTr("Konark Sun Temple"), - "x" : "0.506", - "y" : "0.538", - "height" : "0.07", - "width" : "0.07" + "x": "0.506", + "y": "0.538", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Mysore Palace"), "text": qsTr("Mysore Palace or Mysore Maharaja Palace is one of the largest and most spectacular monuments in the country. Also known as Amba Vilas, it is located in the heart of the city of Mysore. The palace was initially built by the Wodeyar kings in the 14th century."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/mysorePalace.jpg", "text2" : qsTr("Mysore Palace"), - "x" : "0.295", - "y" : "0.748", - "height" : "0.07", - "width" : "0.07" + "x": "0.295", + "y": "0.748", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Charminar"), "text": qsTr("The Charminar in Hyderabad was constructed in 1591 by Mohammed Quli Qutab Shah. He built the Charminar to mark the end of plague in the Hyderabad city. Since the construction of the Charminar, the Hyderabad city has almost become synonymous with the monument. The Charminar is a massive and impressive structure with four minarets. In the evening, with illumination, the great Charminar looks even greater."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/charminar.jpg", "text2" : qsTr("Charminar"), - "x" : "0.360", - "y" : "0.588", - "height" : "0.07", - "width" : "0.07" + "x": "0.360", + "y": "0.588", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Victoria Memorial"), "text": qsTr("The Victoria Memorial was built to commemorate the peak of the British Empire in India. The Victoria Memorial, conceived by Lord Curzon, represents the architectural climax of Kolkata city. Lord Curzon, the then Viceroy specified its classical style but the actual plan of Victoria Memorial was laid down by the well-known architect, Sir William Emerson. The Victoria Memorial blends the best of the British and Mughal architecture. The Victoria Memorial hall was built with white Makrana marbles."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/victoriaMemorials.jpg", "text2" : qsTr("Victoria Memorial"), - "x" : "0.670", - "y" : "0.414", - "height" : "0.07", - "width" : "0.07" + "x": "0.670", + "y": "0.414", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Rang Ghar"), "text": qsTr("The Rang Ghar is a two-storied building which once served as the royal sports-pavilion where Ahom kings and nobles were spectators at games like buffalo fights and other sports at Rupahi Pathar - particularly during the Rongali Bihu festival in the Ahom capital of Rangpur."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/rangGhar.jpg", "text2" : qsTr("Rang Ghar"), - "x" : "0.860", - "y" : "0.306", - "height" : "0.07", - "width" : "0.07" + "x": "0.860", + "y": "0.306", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Qutub Minar"), "text": qsTr("Qutub Minar at 74 meters, is the tallest brick minaret in the world, and the second tallest minar in India after Fateh Burj at Mohali. Qutub Minar, along with the ancient and medieval monuments surrounding it, form the Qutb Complex, which is a UNESCO World Heritage Site. The tower is located in the Mehrauli area of Delhi, India. Made of red sandstone and marble."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/india/qutubMinar.jpg", "text2" : qsTr("Qutub Minar"), - "x" : "0.328", - "y" : "0.254", - "height" : "0.07", - "width" : "0.07" + "x": "0.328", + "y": "0.254", + "height": "0.07", + "width": "0.07" } ] property var instructions : [ { "text": qsTr("Monuments of India") }, { - "text": qsTr("Click on location where the given Monument is located.") + "text": qsTr("Click on location where the given monument is located.") } ] } diff --git a/src/activities/explore_monuments/resource/board/board3.qml b/src/activities/explore_monuments/resource/board/board3.qml index 685e8a095..1d1e962c5 100644 --- a/src/activities/explore_monuments/resource/board/board3.qml +++ b/src/activities/explore_monuments/resource/board/board3.qml @@ -1,147 +1,147 @@ /* GCompris * * Copyright (C) 2015 Ayush Agrawal * * Authors: * Bruno Coudoin (GTK+ version) * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/france/francebg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Mont-Saint-Michel"), "text": qsTr("Mont Saint-Michel is a rocky tidal island located in Normandy, at the mouth of the Couesnon River, near the city of Avranches. The highest point of the island is the spire at the top of the Abbey’s bell tower, 170 metres above sea level. They are currently less than 50 people living on the island. The unique feature of Mont Saint-Michel is that it is completely surrounded by water and can only be accessed at low tide."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/montStMichel.jpg", "text2" : qsTr("Mont-Saint-Michel"), - "x" : "0.278", - "y" : "0.268", - "height" : "0.07", - "width" : "0.07" + "x": "0.278", + "y": "0.268", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Cité de Carcassonne"), "text": qsTr("With more than 4 million visitors each year, Carcassonne is among the most prestigious tourist destinations in France, on a par with Mont Saint Michel and Paris’ Notre-Dame. A UNESCO World Heritage Site since 1997, Carcassonne is a dramatic representation of medieval architecture perched on a rocky spur that towers above the River Aude, southeast of the new town."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/citedeCarcassonne.jpg", "text2" : qsTr("Cité de Carcassonne"), - "x" : "0.588", - "y" : "0.875", - "height" : "0.07", - "width" : "0.07" + "x": "0.588", + "y": "0.875", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Reims Cathedral"), "text": qsTr("By size, Reims Cathedral is quite an extraordinary construction: designed to accommodate huge crowds, its gigantic dimensions include a surface area of 6,650 m2 and a length of 122m. A Gothic art masterpiece and the coronation site of the Kings of France, it has been listed as a UNESCO World Heritage Site since 1991. The Mecca for tourists in the Champagne region welcomes 1,500,000 visitors every year."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/reimsCathedral.jpg", "text2" : qsTr("Reims Cathedral"), - "x" : "0.687", - "y" : "0.196", - "height" : "0.07", - "width" : "0.07" + "x": "0.687", + "y": "0.196", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Pont du Gard"), "text": qsTr("The Pont du Gard was built shortly before the Christian era to allow the aqueduct of Nîmes (which is almost 50 km long) to cross the Gardon river. The Roman architects and hydraulic engineers who designed this bridge, which stands almost 50 m high and is on three levels – the longest measuring 275 m – created a technical as well as an artistic masterpiece."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/pontduGard.jpg", "text2" : qsTr("Pont du Gard"), - "x" : "0.691", - "y" : "0.757", - "height" : "0.07", - "width" : "0.07" + "x": "0.691", + "y": "0.757", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Arles Amphitheatre"), "text": qsTr("This Roman amphitheatre dates back to the first century BC and was originally the setting for gladiator battles and chariot races during Antiquity. Modified many times, it was finally renovated during the 19th century."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/arlesAmphitheater.jpg", "text2" : qsTr("Arles Amphitheatre"), - "x" : "0.730", - "y" : "0.831", - "height" : "0.07", - "width" : "0.07" + "x": "0.730", + "y": "0.831", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Château de Chambord"), "text": qsTr("Prestigious, majestic, colossal, extravagant are these adjectives enough to fully describe the splendour of Chambord? The largest chateau of the Loire Valley is indeed full of surprises for those who are lucky enough to explore its domain. This remarkable piece of architecture is certainly more than just a castle: it is the dream of a King, transformed into reality."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/chateaudeChambord.jpg", "text2" : qsTr("Château de Chambord"), - "x" : "0.456", - "y" : "0.388", - "height" : "0.07", - "width" : "0.07" + "x": "0.456", + "y": "0.388", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Rocamadour"), "text": qsTr("When coming from Cahors by road, Rocamadour suddenly appears clinging precariously against the cliff above the Alzou canyon. One of the most famous villages of Europe, Rocamadour seemingly defies the laws of gravity. The vertiginous Citadel of Faith is best summed up by an old local saying: “houses on the river, churches on the houses, rocks on the churches, castle on the rock”."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/rocamadour.jpg", "text2" : qsTr("Rocamadour"), - "x" : "0.538", - "y" : "0.658", - "height" : "0.07", - "width" : "0.07" + "x": "0.538", + "y": "0.658", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Palais des Papes"), "text": qsTr("The star attraction of Avignon is the Palais des Papes (Palace of the Popes), a vast castle of significant historic, religious and architectural importance. It is one of the largest and most important medieval Gothic buildings in Europe."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/palaisdesPapes.jpg", "text2" : qsTr("Palais des Papes"), - "x" : "0.771", - "y" : "0.768", - "height" : "0.07", - "width" : "0.07" + "x": "0.771", + "y": "0.768", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Château de Chenonceau"), "text": qsTr("Chateau de Chenonceau is among many of Loire Valley Chateaux that boast amazing architecture and historical significance drawing thousands of tourists from all over the world. Chateau de Chenonceau is sometimes called the Ladies Castle by some historians due to feminine figures having greatly influenced the construction and development of this French Chateau over the centuries."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/chateaudeChenonceau.jpg", "text2" : qsTr("Château de Chenonceau"), - "x" : "0.449", - "y" : "0.464", - "height" : "0.07", - "width" : "0.07" + "x": "0.449", + "y": "0.464", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Eiffel Tower"), "text": qsTr("The world-famous metallic tower was built for the Paris International Exhibition in 1889 for the centenary of the French Revolution. At the time of its inauguration, it was the world’s tallest monument."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/france/eiffelTower.jpg", "text2" : qsTr("Eiffel Tower"), - "x" : "0.538", - "y" : "0.304", - "height" : "0.07", - "width" : "0.07" + "x": "0.538", + "y": "0.304", + "height": "0.07", + "width": "0.07" }, ] property var instructions : [ { "text": qsTr("Monuments of France") }, { - "text": qsTr("Click on location where the given Monument is located.") + "text": qsTr("Click on location where the given monument is located.") } ] } diff --git a/src/activities/explore_monuments/resource/board/board4.qml b/src/activities/explore_monuments/resource/board/board4.qml index cac50015a..726835f5f 100644 --- a/src/activities/explore_monuments/resource/board/board4.qml +++ b/src/activities/explore_monuments/resource/board/board4.qml @@ -1,114 +1,114 @@ /* GCompris * * Copyright (C) 2015 Ayush Agrawal * * Authors: * Bruno Coudoin (GTK+ version) * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/germany/germanybg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Neuschwanstein Castle"), "text": qsTr("The ultimate fairytale castle, Neuschwanstein is situated on a rugged hill near Füssen in southwest Bavaria. It was the inspiration for the Sleeping Beauty castles in the Disneyland parks. The castle was commissioned by King Ludwig II of Bavaria who was declared insane when the castle was almost completed in 1886 and found dead a few days later. Neuschwanstein is the most photographed building in the country and one of the most popular tourist attractions in Germany."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/neuschwansteinCastle.jpg", "text2" : qsTr("Neuschwanstein Castle"), - "x" : "0.525", - "y" : "0.938", - "height" : "0.07", - "width" : "0.07" + "x": "0.525", + "y": "0.938", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Trier Imperial Baths"), "text": qsTr("The Trier Imperial Baths are a large Roman bath complex in Trier, Germany. It is designated as part of the Roman Monuments, Cathedral of St. Peter and Church of Our Lady in Trier UNESCO World Heritage Site."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/trierImperialBaths.jpg", "text2" : qsTr("Trier Imperial Baths"), - "x" : "0.205", - "y" : "0.721", - "height" : "0.07", - "width" : "0.07" + "x": "0.205", + "y": "0.721", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Brandenburg Gate"), "text": qsTr("The Brandenburg Gate is the only surviving city gate of Berlin and symbolizes the reunification of East and West Berlin. Built in the 18th century, the Brandenburg Gate is the entry to Unter den Linden, the prominent boulevard of linden trees which once led directly to the palace of the Prussian monarchs. It is regarded as one of the most famous landmarks in Europe."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/brandenburgGate.jpg", "text2" : qsTr("Brandenburg Gate"), - "x" : "0.753", - "y" : "0.331", - "height" : "0.07", - "width" : "0.07" + "x": "0.753", + "y": "0.331", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Berlin Cathedral"), - "text": qsTr("The Cathedral of Berlin is the largest church in the city, and it serves as a vital center for the Protestant church of Germany. Reaching out well beyond the borders of the parish and of Berlin, the cathedral attracts thousands of visitors, year after year, from Germany and abroad."), + "text": qsTr("The Cathedral of Berlin is the largest church in the city, and it serves as a vital center for the Protestant church of Germany. Reaching out well beyond the borders of the parish and of Berlin, the cathedral attracts thousands of visitors, year after year, from Germany and abroad."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/berlinCathedral.jpg", "text2" : qsTr("Berlin Cathedral"), - "x" : "0.736", - "y" : "0.255", - "height" : "0.07", - "width" : "0.07" + "x": "0.736", + "y": "0.255", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Schwerin Palace"), "text": qsTr("This romantic fairytale fortress, with all its many towers, domes and wings, is reflected in the waters of Lake Schwerin. It was completed in 1857 and symbolized the powerful dynasty of its founder, Friedrich Franz II."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/schwerinPalace.jpg", "text2" : qsTr("Schwerin Palace"), - "x" : "0.585", - "y" : "0.206", - "height" : "0.07", - "width" : "0.07" + "x": "0.585", + "y": "0.206", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Aula Palatina"), "text": qsTr("The long, high-ceilinged brick structure was the throne hall of the Roman emperor until the destruction of the city by Germanic tribes. The invaders built a settlement inside the roofless ruin. In the 12th century, the apse was converted into a tower to accommodate the Archbishop of Trier."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/aulaPalatina.jpg", "text2" : qsTr("Aula Palatina"), - "x" : "0.245", - "y" : "0.655", - "height" : "0.07", - "width" : "0.07" + "x": "0.245", + "y": "0.655", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Worms Cathedral"), "text": qsTr("Worms Cathedral (Wormser Dom) also known as the Cathedral of St Peter is a Romanesque cathedral in the German city of Worms. A sandstone structure with distinctive conical towers, Worms Cathedral was constructed in phases throughout the twelfth century and mostly completed by 1181."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/germany/wormsCathedral.jpg", "text2" : qsTr("Worms Cathedral"), - "x" : "0.332", - "y" : "0.697", - "height" : "0.07", - "width" : "0.07" + "x": "0.332", + "y": "0.697", + "height": "0.07", + "width": "0.07" }, ] property var instructions : [ { "text": qsTr("Monuments of Germany") }, { - "text": qsTr("Click on location where the given Monument is located.") + "text": qsTr("Click on location where the given monument is located.") } ] } diff --git a/src/activities/explore_monuments/resource/board/board5.qml b/src/activities/explore_monuments/resource/board/board5.qml index 1c82cd002..7012bb406 100644 --- a/src/activities/explore_monuments/resource/board/board5.qml +++ b/src/activities/explore_monuments/resource/board/board5.qml @@ -1,147 +1,147 @@ /* GCompris * * Copyright (C) 2015 Ayush Agrawal * * Authors: * Bruno Coudoin (GTK+ version) * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/usa/usbg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Cabrillo"), "text": qsTr("Situated on Point Loma in San Diego, California, Cabrillo National Monument commemorates the first European to land on the West Coast of the United States, Juan Rodriguez Cabrillo. Portuguese by birth, Cabrillo carried the Spanish flag in his conquests of the New World. He arrived at San Diego Bay in September 1542, three months after departing from Barra de Navidad on the west coast of Mexico."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/cabrillo.jpg", "text2" : qsTr("Cabrillo"), - "x" : "0.182", - "y" : "0.586", - "height" : "0.07", - "width" : "0.07" + "x": "0.182", + "y": "0.586", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Canyon de Chelly"), "text": qsTr("The stoic red ruins of Canyon de Chelly in northeastern Arizona are at once part of the National Park Service and the Navajo Nation, having been established as a national monument in 1931. A number of important early Native American sites are preserved in the nearly 84,000 acres of parkland, and Canyon de Chelly also offers an array of Southwestern geological formations, including Spider Rock, an 800-foot-tall sandstone spire that rises eerily from the bottom of the canyon floor."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/canyondeChelly.jpg", "text2" : qsTr("Canyon de Chelly"), - "x" : "0.277", - "y" : "0.569", - "height" : "0.07", - "width" : "0.07" + "x": "0.277", + "y": "0.569", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Castillo de San Marcos"), "text": qsTr("Set on more than 20 acres in St. Augustine, Florida, the Castillo de San Marcos was completed as the city's defensive fort in 1695, when Florida was still a Spanish territory. Constructed out of the rare coquina limestone, the star-shaped Castillo also is the oldest masonry fort in the country."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/castillodeSanMarcos.jpg", "text2" : qsTr("Castillo de San Marcos"), - "x" : "0.759", - "y" : "0.668", - "height" : "0.07", - "width" : "0.07" + "x": "0.759", + "y": "0.668", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Castle Clinton"), "text": qsTr("This round, sandstone fort sitting at the bottom of Manhattan Island predates Ellis Island by about 50 years as the first U.S. immigration checkpoint. Castle Clinton (nps.gov/cacl) was originally built as a fort to protect New York from a British invasion during the War of 1812, and was dedicated as a national monument in 1946."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/castleClinton.jpg", "text2" : qsTr("Castle Clinton"), - "x" : "0.841", - "y" : "0.390", - "height" : "0.07", - "width" : "0.07" + "x": "0.841", + "y": "0.390", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("George Washington Birthplace"), "text": qsTr("The George Washington Birthplace National Monument is in Westmoreland County, Virginia, United States. Originally settled by John Washington, George Washington's great-grandfather, George Washington was born here on February 22, 1732. He lived here until age three, returning later as a teenager."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/georgeWashingtonBirthplace.jpg", "text2" : qsTr("George Washington Birthplace"), - "x" : "0.836", - "y" : "0.532", - "height" : "0.07", - "width" : "0.07" + "x": "0.836", + "y": "0.532", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Lincoln Memorial"), "text": qsTr("Built in white stone with 36 iconic columns, The Lincoln Memorial is one of the most recognized structures in the United States. The memorial is at the west end of the National Mall, in West Potomac Park, and is an example in Neoclassical architecture. It features a solitary, 19-foot-tall statue of Abraham Lincoln sitting in contemplation, which is flanked on both side chambers with inscriptions of Lincoln’s Second Inaugural Address and arguably his most famous speech, the Gettysburg Address."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/lincolnMemorial.jpg", "text2" : qsTr("Lincoln Memorial"), - "x" : "0.791", - "y" : "0.456", - "height" : "0.07", - "width" : "0.07" + "x": "0.791", + "y": "0.456", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Mount Rushmore"), "text": qsTr("Mt. Rushmore stands as a shrine of democracy, a monument and memorial to George Washington, this country's birth, growth and ideals. Mount Rushmore symbolizes the greatness of this nation through the greatness of its leaders. The epic sculpture of Mount Rushmore depicts the faces of four exalted American presidents that symbolize this nation's rich history, rugged determination and lasting achievements."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/mountRushmore.jpg", "text2" : qsTr("Mount Rushmore"), - "x" : "0.492", - "y" : "0.399", - "height" : "0.07", - "width" : "0.07" + "x": "0.492", + "y": "0.399", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Navajo"), "text": qsTr("Navajo National Monument is a National Monument located within the northwest portion of the Navajo Nation territory in northern Arizona, which was established to preserve three-well preserved cliff dwellings of the Ancestral Puebloan People: Keet Seel (Kitsʼiil), Betatakin (Bitátʼahkin), and Inscription House (Tsʼah Biiʼ Kin). The monument is high on the Shonto plateau, overlooking the Tsegi Canyon system, west of Kayenta, Arizona. It features a visitor center with a museum, two short self-guided mesa top trails, two small campgrounds, and a picnic area. Rangers guide visitors on free tours of the Keet Seel and Betatakin cliff dwellings. The Inscription House site, further west, is currently closed to public access."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/navajo.jpg", "text2" : qsTr("Navajo"), - "x" : "0.300", - "y" : "0.498", - "height" : "0.07", - "width" : "0.07" + "x": "0.300", + "y": "0.498", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Statue of Liberty"), "text": qsTr("Perhaps the best-known monument and symbol of the United States is the Statue of Liberty, which sits on its own tiny island in New York City. The statue was a gift from the people of France and was dedicated in October 1886."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/statueofLiberty.jpg", "text2" : qsTr("Statue of Liberty"), - "x" : "0.860", - "y" : "0.309", - "height" : "0.07", - "width" : "0.07" + "x": "0.860", + "y": "0.309", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Fort Sumter"), "text": qsTr("Originally built as a defensive structure following the War of 1812, it was at this oceanfront fortification in Charleston Harbor, South Carolina, that the first shots of the Civil War were fired. Inside Fort Sumter, a number of exhibits offer perspectives on U.S. history, particularly the divisions between North and South that eventually resulted in the war."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/usa/fortSumter.jpg", "text2" : qsTr("Fort Sumter"), - "x" : "0.769", - "y" : "0.589", - "height" : "0.07", - "width" : "0.07" + "x": "0.769", + "y": "0.589", + "height": "0.07", + "width": "0.07" }, ] property var instructions : [ { "text": qsTr("Monuments of US") }, { - "text": qsTr("Click on location where the given Monument is located.") + "text": qsTr("Click on location where the given monument is located.") } ] } diff --git a/src/activities/explore_monuments/resource/board/board6.qml b/src/activities/explore_monuments/resource/board/board6.qml index 4c8ba811f..b2afd426e 100644 --- a/src/activities/explore_monuments/resource/board/board6.qml +++ b/src/activities/explore_monuments/resource/board/board6.qml @@ -1,80 +1,80 @@ /* GCompris * * Copyright (C) 2016 Ayush Agrawal * * Authors: * Ayush Agrawal (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.0 QtObject { property string backgroundImage: "qrc:/gcompris/src/activities/explore_monuments/resource/egypt/egyptbg.jpg" property var tab : [ { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Great Pyramid of Giza"), "text": qsTr("The Great Pyramid of Giza is also known as the Pyramid of Khufu or the Pyramid of Cheops. It is considered to be the oldest of all the Seven Wonders of the Ancient World. It is also the largest of all the three pyramids in the Giza. It is situated in Giza Necropolis of Egypt. The initial construction has been started by Egyptian Pharaoh Khufu then it was continued by his son Khafre and finally completed by Menkaure. It took almost 20 years to build the pyramid and approximately 2 million blocks of stone has been used in the construction. The height of the pyramid is approximately 139 meters making it the highest pyramid of Egypt."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/egypt/greatPyramidOfGiza.jpg", "text2" : qsTr("Great Pyramid of Giza"), - "x" : "0.627", - "y" : "0.141", - "height" : "0.07", - "width" : "0.07" + "x": "0.627", + "y": "0.141", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Bent Pyramid"), "text": qsTr("The Bent Pyramid located at Dahshur was the second pyramid built by pharaoh Sneferu. Mysteriously, this true pyramid rises from the desert at an angle of 55 degrees and then suddenly changes to a more gradual angle of 43 degrees. One theory holds that due to the steepness of the original angle the weight to be added above the inner chambers and passageways became too large, forcing the builders to adopt a shallower angle. Today, the Bent Pyramid is the only pyramid in Egypt of which the outer casing of polished limestone is still largely intact."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/egypt/bentPyramid.jpg", "text2" : qsTr("Bent Pyramid"), - "x" : "0.596", - "y" : "0.200", - "height" : "0.07", - "width" : "0.07" + "x": "0.596", + "y": "0.200", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Pyramid of Meidum"), "text": qsTr("Five miles south of Saqqara in Egypt stands the mysterious tower-like pyramid of Meidum, which today scarcely resembles a typical pyramid at all. The pyramid was probably built during the reign of the 4th Dynasty pharaoh Sneferu, although it is believed by some that the pyramid may have been started by Sneferu’s predecessor, Huni. At some point during its construction the steps of the pyramid were filled with limestone encasing marking the first attempt by the ancient Egyptians at the construction of a true pyramid."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/egypt/meidumPyramid.jpg", "text2" : qsTr("Pyramid of Meidum"), - "x" : "0.609", - "y" : "0.260", - "height" : "0.07", - "width" : "0.07" + "x": "0.609", + "y": "0.260", + "height": "0.07", + "width": "0.07" }, { "image": "qrc:/gcompris/src/activities/explore_monuments/resource/wonders/key.png", "title": qsTr("Red Pyramid"), "text": qsTr("Red Pyramid was one of the finest and successful attempts by Pharaoh Sneferu in building world’s first ever smooth sided pyramid during the Ancient Egypt period. The height of the pyramid is 104 meters making it the world’s 4th largest pyramid in Egypt. The pyramid has been built with red limestone stones and hence the name. The local people of Egypt called it as el-heram el-watwaat meaning the Bat Pyramid."), "image2": "qrc:/gcompris/src/activities/explore_monuments/resource/egypt/redPyramid.jpg", "text2" : qsTr("Red Pyramid"), - "x" : "0.535", - "y" : "0.240", - "height" : "0.07", - "width" : "0.07" + "x": "0.535", + "y": "0.240", + "height": "0.07", + "width": "0.07" } ] property var instructions : [ { "text": qsTr("Egyptian pyramids") }, { "text": qsTr("Click on location where the given pyramid is located.") } ] } diff --git a/src/activities/geo-country/resource/board/board1_0.qml b/src/activities/geo-country/resource/board/board1_0.qml index dbaba4be0..21f5ee05f 100644 --- a/src/activities/geo-country/resource/board/board1_0.qml +++ b/src/activities/geo-country/resource/board/board1_0.qml @@ -1,186 +1,123 @@ /* GCompris * * Copyright (C) 2015 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * Pulkit Gupta (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.0 QtObject { property string instruction: qsTr("Districts of France") property variant levels: [ { "pixmapfile" : "france/france-regions.png", "type" : "SHAPE_BACKGROUND_IMAGE" }, { - "pixmapfile" : "france/rhone-alpes.png", - "sound": "voices-$CA/$LOCALE/france/rhone-alpes.$CA", - "toolTipText" : "Rhône Alpes", - "x" : "0.639", - "y" : "0.6" - }, - { - "pixmapfile" : "france/paca.png", - "sound": "voices-$CA/$LOCALE/france/provence-alpes-cote_d_azur.$CA", - "toolTipText" : "Provence Alpes Côte d'Azur", - "x" : "0.671", - "y" : "0.73" - }, - { - "pixmapfile" : "france/poitou-charentes.png", - "sound": "voices-$CA/$LOCALE/france/poitou-charentes.$CA", - "toolTipText" : "Poitou Charentes", - "x" : "0.363", - "y" : "0.517" - }, - { - "pixmapfile" : "france/picardie.png", - "sound": "voices-$CA/$LOCALE/france/picardie.$CA", - "toolTipText" : "Picardie", - "x" : "0.506", - "y" : "0.158" + "pixmapfile" : "france/corse.png", + "sound" : "voices-$CA/$LOCALE/france/corse.$CA", + "x" : "0.836", + "y" : "0.905", + "toolTipText" : "Corse" }, { - "pixmapfile" : "france/pays-de-la-loire.png", - "sound": "voices-$CA/$LOCALE/france/pays-de-la-loire.$CA", - "toolTipText" : "Pays de la Loire", - "x" : "0.333", - "y" : "0.382" + "pixmapfile" : "france/nouvelle-aquitaine.png", + "sound" : "voices-$CA/$LOCALE/france/nouvelle-aquitaine.$CA", + "x" : "0.37", + "y" : "0.64", + "toolTipText" : "Nouvelle-Aquitaine" }, { - "pixmapfile" : "france/nord-pas-de-calais.png", - "sound": "voices-$CA/$LOCALE/france/nord-pas-de-calais.$CA", - "toolTipText" : "Nord Pas de Calais", - "x" : "0.51", - "y" : "0.062" + "pixmapfile" : "france/occitanie.png", + "sound" : "voices-$CA/$LOCALE/france/occitanie.$CA", + "x" : "0.47", + "y" : "0.776", + "toolTipText" : "Occitanie" }, { - "pixmapfile" : "france/midi-pyrenees.png", - "sound": "voices-$CA/$LOCALE/france/midi-pyrenees.$CA", - "toolTipText" : "Midi Pyrénées", - "x" : "0.444", - "y" : "0.763" + "pixmapfile" : "france/paca.png", + "sound" : "voices-$CA/$LOCALE/france/paca.$CA", + "x" : "0.672", + "y" : "0.728", + "toolTipText" : "Provence-Alpes-Côte d'Azur" }, { - "pixmapfile" : "france/lorraine.png", - "sound": "voices-$CA/$LOCALE/france/lorraine.$CA", - "toolTipText" : "Lorraine", - "x" : "0.667", - "y" : "0.243" + "pixmapfile" : "france/auvergne-rhone-alpes.png", + "sound" : "voices-$CA/$LOCALE/france/auvergne-rhone-alpes.$CA", + "x" : "0.597", + "y" : "0.586", + "toolTipText" : "Auvergne-Rhône-Alpes" }, { - "pixmapfile" : "france/limousin.png", - "sound": "voices-$CA/$LOCALE/france/limousin.$CA", - "toolTipText" : "Limousin", - "x" : "0.45", - "y" : "0.566" + "pixmapfile" : "france/centre-val-de-loire.png", + "sound" : "voices-$CA/$LOCALE/france/centre-val-de-loire.$CA", + "x" : "0.439", + "y" : "0.360", + "toolTipText" : "Centre-Val de Loire" }, { - "pixmapfile" : "france/languedoc-roussillon.png", - "sound": "voices-$CA/$LOCALE/france/languedoc-roussillon.$CA", - "toolTipText" : "Languedoc Roussillon", - "x" : "0.532", - "y" : "0.778" + "pixmapfile" : "france/pays-de-la-loire.png", + "sound" : "voices-$CA/$LOCALE/france/pays-de-la-loire.$CA", + "x" : "0.316", + "y" : "0.378", + "toolTipText" : "Pays de la Loire" }, { "pixmapfile" : "france/ile-de-france.png", - "sound": "voices-$CA/$LOCALE/france/ile-de-france.$CA", - "toolTipText" : "Ile de France", - "x" : "0.493", - "y" : "0.253" - }, - { - "pixmapfile" : "france/haute-normandie.png", - "sound": "voices-$CA/$LOCALE/france/haute-normandie.$CA", - "toolTipText" : "Normandie", - "x" : "0.421", - "y" : "0.181" - }, - { - "pixmapfile" : "france/franche-conte.png", - "sound": "voices-$CA/$LOCALE/france/franche-conte.$CA", - "toolTipText" : "Franche Comté", - "x" : "0.669", - "y" : "0.407" - }, - { - "pixmapfile" : "france/corse.png", - "sound": "voices-$CA/$LOCALE/france/corse.$CA", - "toolTipText" : "Corse", - "x" : "0.836", - "y" : "0.909" - }, - { - "pixmapfile" : "france/champagne-ardenne.png", - "sound": "voices-$CA/$LOCALE/france/champagne-ardenne.$CA", - "toolTipText" : "Champagne Ardenne", - "x" : "0.593", - "y" : "0.23" - }, - { - "pixmapfile" : "france/centre.png", - "sound": "voices-$CA/$LOCALE/france/centre.$CA", - "toolTipText" : "Centre", - "x" : "0.449", - "y" : "0.361" + "sound" : "voices-$CA/$LOCALE/france/ile-de-france.$CA", + "x" : "0.486", + "y" : "0.253", + "toolTipText" : "Île-de-france" }, { "pixmapfile" : "france/bretagne.png", - "sound": "voices-$CA/$LOCALE/france/bretagne.$CA", - "toolTipText" : "Bretagne", - "x" : "0.231", - "y" : "0.303" - }, - { - "pixmapfile" : "france/bourgogne.png", - "sound": "voices-$CA/$LOCALE/france/bourgogne.$CA", - "toolTipText" : "Bourgogne", - "x" : "0.574", - "y" : "0.398" + "sound" : "voices-$CA/$LOCALE/france/bretagne.$CA", + "x" : "0.216", + "y" : "0.291", + "toolTipText" : "Bretagne" }, { - "pixmapfile" : "france/basse-normandie.png", - "sound": "voices-$CA/$LOCALE/france/basse-normandie.$CA", - "toolTipText" : "Basse Normandie", - "x" : "0.354", - "y" : "0.22" + "pixmapfile" : "france/normandie.png", + "sound" : "voices-$CA/$LOCALE/france/normandie.$CA", + "x" : "0.366", + "y" : "0.199", + "toolTipText" : "Normandie" }, { - "pixmapfile" : "france/auvergne.png", - "sound": "voices-$CA/$LOCALE/france/auvergne.$CA", - "toolTipText" : "Auvergne", - "x" : "0.532", - "y" : "0.564" + "pixmapfile" : "france/haut-de-france.png", + "sound" : "voices-$CA/$LOCALE/france/haut-de-france.$CA", + "x" : "0.503", + "y" : "0.117", + "toolTipText" : "Haut de France" }, { - "pixmapfile" : "france/aquitaine.png", - "sound": "voices-$CA/$LOCALE/france/aquitaine.$CA", - "toolTipText" : "Aquitaine", - "x" : "0.357", - "y" : "0.714" + "pixmapfile" : "france/grand-est.png", + "sound" : "voices-$CA/$LOCALE/france/grand-est.$CA", + "x" : "0.649", + "y" : "0.233", + "toolTipText" : "Grand est" }, { - "pixmapfile" : "france/alsace.png", - "sound": "voices-$CA/$LOCALE/france/alsace.$CA", - "toolTipText" : "Alsace", - "x" : "0.729", - "y" : "0.286" + "pixmapfile" : "france/bourgogne-franche-comte.png", + "sound" : "voices-$CA/$LOCALE/france/bourgogne-franche-comte.$CA", + "x" : "0.613", + "y" : "0.398", + "toolTipText" : "Bourgogne-Franche-Comté" } ] } diff --git a/src/activities/geo-country/resource/france/alsace.png b/src/activities/geo-country/resource/france/alsace.png deleted file mode 100644 index a5ccb00c5..000000000 Binary files a/src/activities/geo-country/resource/france/alsace.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/aquitaine.png b/src/activities/geo-country/resource/france/aquitaine.png deleted file mode 100644 index e9603dc43..000000000 Binary files a/src/activities/geo-country/resource/france/aquitaine.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/auvergne-rhone-alpes.png b/src/activities/geo-country/resource/france/auvergne-rhone-alpes.png new file mode 100644 index 000000000..8946e4222 Binary files /dev/null and b/src/activities/geo-country/resource/france/auvergne-rhone-alpes.png differ diff --git a/src/activities/geo-country/resource/france/auvergne.png b/src/activities/geo-country/resource/france/auvergne.png deleted file mode 100644 index 2d7ac4bbf..000000000 Binary files a/src/activities/geo-country/resource/france/auvergne.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/basse-normandie.png b/src/activities/geo-country/resource/france/basse-normandie.png deleted file mode 100644 index a2f9f56ee..000000000 Binary files a/src/activities/geo-country/resource/france/basse-normandie.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/bourgogne-franche-comte.png b/src/activities/geo-country/resource/france/bourgogne-franche-comte.png new file mode 100644 index 000000000..403d4cebe Binary files /dev/null and b/src/activities/geo-country/resource/france/bourgogne-franche-comte.png differ diff --git a/src/activities/geo-country/resource/france/bourgogne.png b/src/activities/geo-country/resource/france/bourgogne.png deleted file mode 100644 index 9c6cba781..000000000 Binary files a/src/activities/geo-country/resource/france/bourgogne.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/bretagne.png b/src/activities/geo-country/resource/france/bretagne.png index b543584cc..3d91eae22 100644 Binary files a/src/activities/geo-country/resource/france/bretagne.png and b/src/activities/geo-country/resource/france/bretagne.png differ diff --git a/src/activities/geo-country/resource/france/centre-val-de-loire.png b/src/activities/geo-country/resource/france/centre-val-de-loire.png new file mode 100644 index 000000000..e7f68eede Binary files /dev/null and b/src/activities/geo-country/resource/france/centre-val-de-loire.png differ diff --git a/src/activities/geo-country/resource/france/centre.png b/src/activities/geo-country/resource/france/centre.png deleted file mode 100644 index 4d83f98c0..000000000 Binary files a/src/activities/geo-country/resource/france/centre.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/champagne-ardenne.png b/src/activities/geo-country/resource/france/champagne-ardenne.png deleted file mode 100644 index 2f3964706..000000000 Binary files a/src/activities/geo-country/resource/france/champagne-ardenne.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/corse.png b/src/activities/geo-country/resource/france/corse.png index 68936b1b2..603e3413d 100644 Binary files a/src/activities/geo-country/resource/france/corse.png and b/src/activities/geo-country/resource/france/corse.png differ diff --git a/src/activities/geo-country/resource/france/france-regions.png b/src/activities/geo-country/resource/france/france-regions.png index 971afd90b..0a5fae4a9 100644 Binary files a/src/activities/geo-country/resource/france/france-regions.png and b/src/activities/geo-country/resource/france/france-regions.png differ diff --git a/src/activities/geo-country/resource/france/franche-conte.png b/src/activities/geo-country/resource/france/franche-conte.png deleted file mode 100644 index 45bbef019..000000000 Binary files a/src/activities/geo-country/resource/france/franche-conte.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/grand-est.png b/src/activities/geo-country/resource/france/grand-est.png new file mode 100644 index 000000000..ef8f6de3e Binary files /dev/null and b/src/activities/geo-country/resource/france/grand-est.png differ diff --git a/src/activities/geo-country/resource/france/haut-de-france.png b/src/activities/geo-country/resource/france/haut-de-france.png new file mode 100644 index 000000000..1b24f6e1a Binary files /dev/null and b/src/activities/geo-country/resource/france/haut-de-france.png differ diff --git a/src/activities/geo-country/resource/france/haute-normandie.png b/src/activities/geo-country/resource/france/haute-normandie.png deleted file mode 100644 index e4d3628e7..000000000 Binary files a/src/activities/geo-country/resource/france/haute-normandie.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/ile-de-france.png b/src/activities/geo-country/resource/france/ile-de-france.png index 7d2f5639b..cb43b53ef 100644 Binary files a/src/activities/geo-country/resource/france/ile-de-france.png and b/src/activities/geo-country/resource/france/ile-de-france.png differ diff --git a/src/activities/geo-country/resource/france/languedoc-roussillon.png b/src/activities/geo-country/resource/france/languedoc-roussillon.png deleted file mode 100644 index 948230a4e..000000000 Binary files a/src/activities/geo-country/resource/france/languedoc-roussillon.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/limousin.png b/src/activities/geo-country/resource/france/limousin.png deleted file mode 100644 index 7d735d89e..000000000 Binary files a/src/activities/geo-country/resource/france/limousin.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/lorraine.png b/src/activities/geo-country/resource/france/lorraine.png deleted file mode 100644 index 2ccac571d..000000000 Binary files a/src/activities/geo-country/resource/france/lorraine.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/midi-pyrenees.png b/src/activities/geo-country/resource/france/midi-pyrenees.png deleted file mode 100644 index bbff579c3..000000000 Binary files a/src/activities/geo-country/resource/france/midi-pyrenees.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/nord-pas-de-calais.png b/src/activities/geo-country/resource/france/nord-pas-de-calais.png deleted file mode 100644 index ae179d7d2..000000000 Binary files a/src/activities/geo-country/resource/france/nord-pas-de-calais.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/normandie.png b/src/activities/geo-country/resource/france/normandie.png new file mode 100644 index 000000000..abfa29955 Binary files /dev/null and b/src/activities/geo-country/resource/france/normandie.png differ diff --git a/src/activities/geo-country/resource/france/nouvelle-aquitaine.png b/src/activities/geo-country/resource/france/nouvelle-aquitaine.png new file mode 100644 index 000000000..9e7370c89 Binary files /dev/null and b/src/activities/geo-country/resource/france/nouvelle-aquitaine.png differ diff --git a/src/activities/geo-country/resource/france/occitanie.png b/src/activities/geo-country/resource/france/occitanie.png new file mode 100644 index 000000000..5dbe38df8 Binary files /dev/null and b/src/activities/geo-country/resource/france/occitanie.png differ diff --git a/src/activities/geo-country/resource/france/paca.png b/src/activities/geo-country/resource/france/paca.png index 30766d0b9..c16619335 100644 Binary files a/src/activities/geo-country/resource/france/paca.png and b/src/activities/geo-country/resource/france/paca.png differ diff --git a/src/activities/geo-country/resource/france/pays-de-la-loire.png b/src/activities/geo-country/resource/france/pays-de-la-loire.png index b2c7c0199..ba74545bb 100644 Binary files a/src/activities/geo-country/resource/france/pays-de-la-loire.png and b/src/activities/geo-country/resource/france/pays-de-la-loire.png differ diff --git a/src/activities/geo-country/resource/france/picardie.png b/src/activities/geo-country/resource/france/picardie.png deleted file mode 100644 index 01e9fd3c4..000000000 Binary files a/src/activities/geo-country/resource/france/picardie.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/poitou-charentes.png b/src/activities/geo-country/resource/france/poitou-charentes.png deleted file mode 100644 index 01da664bb..000000000 Binary files a/src/activities/geo-country/resource/france/poitou-charentes.png and /dev/null differ diff --git a/src/activities/geo-country/resource/france/rhone-alpes.png b/src/activities/geo-country/resource/france/rhone-alpes.png deleted file mode 100644 index 862f7477d..000000000 Binary files a/src/activities/geo-country/resource/france/rhone-alpes.png and /dev/null differ diff --git a/src/activities/geography/Geography.qml b/src/activities/geography/Geography.qml index 1ff1f4e83..30a73c207 100644 --- a/src/activities/geography/Geography.qml +++ b/src/activities/geography/Geography.qml @@ -1,35 +1,35 @@ /* GCompris - Geography.qml * * Copyright (C) 2015 Pulkit Gupta * * Authors: * Jean-Philippe Ayanides (GTK+ version) * Pulkit Gupta (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 "../babymatch" Babymatch { id: activity onStart: focus = true onStop: {} boardsUrl: "qrc:/gcompris/src/activities/geography/resource/" - levelCount: 11 + levelCount: 10 answerGlow: false } diff --git a/src/activities/geography/resource/board/board10_0.qml b/src/activities/geography/resource/board/board10_0.qml index 295c2e5e8..7462b8777 100644 --- a/src/activities/geography/resource/board/board10_0.qml +++ b/src/activities/geography/resource/board/board10_0.qml @@ -1,357 +1,164 @@ /* GCompris * * Copyright (C) 2015 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * Pulkit Gupta (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.0 QtObject { - property string instruction: qsTr("Asia") + property string instruction: qsTr("Oceania") property variant levels: [ { - "pixmapfile": "asia/background.png", + "pixmapfile": "oceania/bg_oceania.png", "type": "SHAPE_BACKGROUND_IMAGE" }, { - "pixmapfile": "asia/russia.png", - "toolTipText": qsTr("Russia"), - "x": "0.497", - "y": "0.215" + "pixmapfile": "oceania/pitcairn_islands.png", + "toolTipText": qsTr("Pitcairn Islands"), + "x": "0.967", + "y": "0.722" }, { - "pixmapfile": "asia/mongolia.png", - "toolTipText": qsTr("Mongolia"), - "x": "0.562", - "y": "0.341" + "pixmapfile": "oceania/french_polynesia.png", + "toolTipText": qsTr("French Polynesia"), + "x": "0.875", + "y": "0.622" }, { - "pixmapfile": "asia/japan.png", - "toolTipText": qsTr("Japan"), - "x": "0.855", - "y": "0.437" + "pixmapfile": "oceania/papua_new_guinea.png", + "toolTipText": qsTr("Papua New Guinea"), + "x": "0.314", + "y": "0.476" }, { - "pixmapfile": "asia/north_korea.png", - "toolTipText": qsTr("North Korea"), - "x": "0.768", - "y": "0.415" - }, - { - "pixmapfile": "asia/south_korea.png", - "toolTipText": qsTr("South Korea"), - "x": "0.79", - "y": "0.459" - }, - { - "pixmapfile": "asia/kazakhstan.png", - "toolTipText": qsTr("Kazakhstan"), - "x": "0.293", - "y": "0.328" - }, - { - "pixmapfile": "asia/uzbekistan.png", - "toolTipText": qsTr("Uzbekistan"), - "x": "0.289", - "y": "0.403" - }, - { - "pixmapfile": "asia/taiwan.png", - "toolTipText": qsTr("Taiwan"), - "x": "0.772", - "y": "0.603" - }, - { - "pixmapfile": "asia/vietnam.png", - "toolTipText": qsTr("Vietnam"), - "x": "0.661", - "y": "0.691" - }, - { - "pixmapfile": "asia/cambodia.png", - "toolTipText": qsTr("Cambodia"), - "x": "0.658", - "y": "0.732" - }, - { - "pixmapfile": "asia/laos.png", - "toolTipText": qsTr("Laos"), - "x": "0.644", - "y": "0.664" - }, - { - "pixmapfile": "asia/thailand.png", - "toolTipText": qsTr("Thailand"), - "x": "0.627", - "y": "0.723" - }, - { - "pixmapfile": "asia/sri_lanka.png", - "toolTipText": qsTr("Sri Lanka"), - "x": "0.465", - "y": "0.785" - }, - { - "pixmapfile": "asia/china.png", - "toolTipText": qsTr("China"), - "x": "0.577", - "y": "0.466" - }, - { - "pixmapfile": "asia/india.png", - "toolTipText": qsTr("India"), - "x": "0.465", - "y": "0.624" - }, - { - "pixmapfile": "asia/bangladesh.png", - "toolTipText": qsTr("Bangladesh"), - "x": "0.532", - "y": "0.602" - }, - { - "pixmapfile": "asia/bhutan.png", - "toolTipText": qsTr("Bhutan"), - "x": "0.523", - "y": "0.561" - }, - { - "pixmapfile": "asia/nepal.png", - "toolTipText": qsTr("Nepal"), - "x": "0.472", - "y": "0.55" - }, - { - "pixmapfile": "asia/pakistan.png", - "toolTipText": qsTr("Pakistan"), - "x": "0.344", - "y": "0.527" - }, - { - "pixmapfile": "asia/myanmar.png", - "toolTipText": qsTr("Myanmar"), - "x": "0.579", - "y": "0.65" - }, - { - "pixmapfile": "asia/philippines.png", - "toolTipText": qsTr("Philippines"), - "x": "0.8", - "y": "0.736" + "pixmapfile": "oceania/east_timor.png", + "toolTipText": qsTr("East Timor"), + "x": "0.131", + "y": "0.516" }, { - "pixmapfile": "asia/indonesia.png", + "pixmapfile": "oceania/indonesia.png", "toolTipText": qsTr("Indonesia"), - "x": "0.727", - "y": "0.9" - }, - { - "pixmapfile": "asia/malaysia.png", - "toolTipText": qsTr("Malaysia"), - "x": "0.699", - "y": "0.831" - }, - { - "pixmapfile": "asia/afghanistan.png", - "toolTipText": qsTr("Afghanistan"), - "x": "0.328", - "y": "0.487" - }, - { - "pixmapfile": "asia/tajikistan.png", - "toolTipText": qsTr("Tajikistan"), - "x": "0.35", - "y": "0.429" - }, - { - "pixmapfile": "asia/kyrgyzstan.png", - "toolTipText": qsTr("Kyrgyzstan"), - "x": "0.371", - "y": "0.404" - }, - { - "pixmapfile": "asia/turkmenistan.png", - "toolTipText": qsTr("Turkmenistan"), - "x": "0.26", - "y": "0.428" - }, - { - "pixmapfile": "asia/iran.png", - "toolTipText": qsTr("Iran"), - "x": "0.224", - "y": "0.505" - }, - { - "pixmapfile": "asia/azerbaijan.png", - "toolTipText": qsTr("Azerbaijan"), - "x": "0.163", - "y": "0.414" - }, - { - "pixmapfile": "asia/georgia.png", - //: Translators: Strip Asia| and translate only Georgia - "toolTipText": qsTr("Asia|Georgia"), - "x": "0.133", - "y": "0.389" - }, - { - "pixmapfile": "asia/turkey.png", - "toolTipText": qsTr("Turkey"), - "x": "0.077", - "y": "0.428" + "x": "0.128", + "y": "0.456" }, { - "pixmapfile": "asia/syria.png", - "toolTipText": qsTr("Syria"), - "x": "0.108", - "y": "0.478" + "pixmapfile": "oceania/palau.png", + "toolTipText": qsTr("Palau"), + "x": "0.179", + "y": "0.35" }, { - "pixmapfile": "asia/iraq.png", - "toolTipText": qsTr("Iraq"), - "x": "0.15", - "y": "0.492" + "pixmapfile": "oceania/northern_mariana_islands.png", + "toolTipText": qsTr("Northern Mariana Islands"), + "x": "0.288", + "y": "0.222" }, { - "pixmapfile": "asia/jordan.png", - "toolTipText": qsTr("Jordan"), - "x": "0.1", - "y": "0.517" + "pixmapfile": "oceania/micronesia.png", + "toolTipText": qsTr("Micronesia"), + "x": "0.334", + "y": "0.324" }, { - "pixmapfile": "asia/saudi_arabia.png", - "toolTipText": qsTr("Saudi Arabia"), - "x": "0.167", - "y": "0.592" + "pixmapfile": "oceania/vanuatu.png", + "toolTipText": qsTr("Vanuatu"), + "x": "0.487", + "y": "0.582" }, { - "pixmapfile": "asia/yemen.png", - "toolTipText": qsTr("Yemen"), - "x": "0.192", - "y": "0.692" + "pixmapfile": "oceania/tuvalu.png", + "toolTipText": qsTr("Tuvalu"), + "x": "0.572", + "y": "0.484" }, { - "pixmapfile": "asia/united_arab_emirates.png", - "toolTipText": qsTr("United Arab Emirates"), - "x": "0.236", - "y": "0.598" + "pixmapfile": "oceania/tonga.png", + "toolTipText": qsTr("Tonga"), + "x": "0.626", + "y": "0.608" }, { - "pixmapfile": "asia/oman.png", - "toolTipText": qsTr("Oman"), - "x": "0.255", + "pixmapfile": "oceania/new_caledonia.png", + "toolTipText": qsTr("New Caledonia"), + "x": "0.451", "y": "0.628" }, { - "pixmapfile": "asia/armenia.png", - "type": "SHAPE_BACKGROUND", - "x": "0.15", - "y": "0.415" - }, - { - "pixmapfile": "asia/kuwait.png", - "type": "SHAPE_BACKGROUND", - "x": "0.18", - "y": "0.538" - }, - { - "pixmapfile": "asia/cyprus.png", - "type": "SHAPE_BACKGROUND", - "x": "0.065", - "y": "0.472" - }, - { - "pixmapfile": "asia/lebanon.png", - "type": "SHAPE_BACKGROUND", - "x": "0.086", - "y": "0.487" + "pixmapfile": "oceania/marshall_islands.png", + "toolTipText": qsTr("Marshall Islands"), + "x": "0.49", + "y": "0.344" }, { - "pixmapfile": "asia/bahrain.png", - "type": "SHAPE_BACKGROUND", - "x": "0.208", - "y": "0.575" + "pixmapfile": "oceania/kiribati.png", + "toolTipText": qsTr("Kiribati"), + "x": "0.676", + "y": "0.448" }, { - "pixmapfile": "asia/qatar.png", - "type": "SHAPE_BACKGROUND", - "x": "0.214", + "pixmapfile": "oceania/fiji.png", + "toolTipText": qsTr("Fiji"), + "x": "0.569", "y": "0.586" }, { - "pixmapfile": "asia/brunei.png", - "type": "SHAPE_BACKGROUND", - "x": "0.744", - "y": "0.821" + "pixmapfile": "oceania/solomon_islands.png", + "toolTipText": qsTr("Solomon Islands"), + "x": "0.438", + "y": "0.506" }, { - "pixmapfile": "asia/israel.png", - "type": "SHAPE_BACKGROUND", - "x": "0.08", - "y": "0.517" + "pixmapfile": "oceania/new_zealand.png", + "toolTipText": qsTr("New Zealand"), + "x": "0.572", + "y": "0.726" }, { - "pixmapfile": "asia/palestine.png", - "type": "SHAPE_BACKGROUND", - "x": "0.081", - "y": "0.516" + "pixmapfile": "oceania/cook_islands.png", + "toolTipText": qsTr("Cook Islands"), + "x": "0.745", + "y": "0.582" }, { - "pixmapfile": "asia/red_sea.png", - "type": "SHAPE_BACKGROUND", - "x": "0.128", - "y": "0.662" - }, - { - "pixmapfile": "asia/africa2.png", - "type": "SHAPE_BACKGROUND", - "x": "0.176", - "y": "0.808" - }, - { - "pixmapfile": "asia/africa.png", - "type": "SHAPE_BACKGROUND", - "x": "0.054", - "y": "0.769" - }, - { - "pixmapfile": "asia/persian_gulf.png", - "type": "SHAPE_BACKGROUND", - "x": "0.223", - "y": "0.563" + "pixmapfile": "oceania/american_samoa.png", + "toolTipText": qsTr("American Samoa"), + "x": "0.662", + "y": "0.544" }, { - "pixmapfile": "asia/mediteranean_sea.png", - "type": "SHAPE_BACKGROUND", - "x": "0.042", - "y": "0.485" + "pixmapfile": "oceania/australia.png", + "toolTipText": qsTr("Australia"), + "x": "0.273", + "y": "0.748" }, { - "pixmapfile": "asia/black_sea.png", - "type": "SHAPE_BACKGROUND", - "x": "0.059", - "y": "0.344" + "pixmapfile": "oceania/us_minor.png", + "toolTipText": qsTr("United States Minor Outlying Islands"), + "x": "0.617", + "y": "0.258" }, { - "pixmapfile": "asia/caspian_sea.png", - "type": "SHAPE_BACKGROUND", - "x": "0.189", - "y": "0.398" + "pixmapfile": "oceania/hawaii.png", + "toolTipText": qsTr("Hawaii"), + "x": "0.722", + "y": "0.164" } ] } diff --git a/src/activities/geography/resource/board/board11_0.qml b/src/activities/geography/resource/board/board11_0.qml deleted file mode 100644 index 7462b8777..000000000 --- a/src/activities/geography/resource/board/board11_0.qml +++ /dev/null @@ -1,164 +0,0 @@ -/* GCompris - * - * Copyright (C) 2015 Bruno Coudoin - * - * Authors: - * Bruno Coudoin (GTK+ version) - * Pulkit Gupta (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.0 - -QtObject { - property string instruction: qsTr("Oceania") - property variant levels: [ - { - "pixmapfile": "oceania/bg_oceania.png", - "type": "SHAPE_BACKGROUND_IMAGE" - }, - { - "pixmapfile": "oceania/pitcairn_islands.png", - "toolTipText": qsTr("Pitcairn Islands"), - "x": "0.967", - "y": "0.722" - }, - { - "pixmapfile": "oceania/french_polynesia.png", - "toolTipText": qsTr("French Polynesia"), - "x": "0.875", - "y": "0.622" - }, - { - "pixmapfile": "oceania/papua_new_guinea.png", - "toolTipText": qsTr("Papua New Guinea"), - "x": "0.314", - "y": "0.476" - }, - { - "pixmapfile": "oceania/east_timor.png", - "toolTipText": qsTr("East Timor"), - "x": "0.131", - "y": "0.516" - }, - { - "pixmapfile": "oceania/indonesia.png", - "toolTipText": qsTr("Indonesia"), - "x": "0.128", - "y": "0.456" - }, - { - "pixmapfile": "oceania/palau.png", - "toolTipText": qsTr("Palau"), - "x": "0.179", - "y": "0.35" - }, - { - "pixmapfile": "oceania/northern_mariana_islands.png", - "toolTipText": qsTr("Northern Mariana Islands"), - "x": "0.288", - "y": "0.222" - }, - { - "pixmapfile": "oceania/micronesia.png", - "toolTipText": qsTr("Micronesia"), - "x": "0.334", - "y": "0.324" - }, - { - "pixmapfile": "oceania/vanuatu.png", - "toolTipText": qsTr("Vanuatu"), - "x": "0.487", - "y": "0.582" - }, - { - "pixmapfile": "oceania/tuvalu.png", - "toolTipText": qsTr("Tuvalu"), - "x": "0.572", - "y": "0.484" - }, - { - "pixmapfile": "oceania/tonga.png", - "toolTipText": qsTr("Tonga"), - "x": "0.626", - "y": "0.608" - }, - { - "pixmapfile": "oceania/new_caledonia.png", - "toolTipText": qsTr("New Caledonia"), - "x": "0.451", - "y": "0.628" - }, - { - "pixmapfile": "oceania/marshall_islands.png", - "toolTipText": qsTr("Marshall Islands"), - "x": "0.49", - "y": "0.344" - }, - { - "pixmapfile": "oceania/kiribati.png", - "toolTipText": qsTr("Kiribati"), - "x": "0.676", - "y": "0.448" - }, - { - "pixmapfile": "oceania/fiji.png", - "toolTipText": qsTr("Fiji"), - "x": "0.569", - "y": "0.586" - }, - { - "pixmapfile": "oceania/solomon_islands.png", - "toolTipText": qsTr("Solomon Islands"), - "x": "0.438", - "y": "0.506" - }, - { - "pixmapfile": "oceania/new_zealand.png", - "toolTipText": qsTr("New Zealand"), - "x": "0.572", - "y": "0.726" - }, - { - "pixmapfile": "oceania/cook_islands.png", - "toolTipText": qsTr("Cook Islands"), - "x": "0.745", - "y": "0.582" - }, - { - "pixmapfile": "oceania/american_samoa.png", - "toolTipText": qsTr("American Samoa"), - "x": "0.662", - "y": "0.544" - }, - { - "pixmapfile": "oceania/australia.png", - "toolTipText": qsTr("Australia"), - "x": "0.273", - "y": "0.748" - }, - { - "pixmapfile": "oceania/us_minor.png", - "toolTipText": qsTr("United States Minor Outlying Islands"), - "x": "0.617", - "y": "0.258" - }, - { - "pixmapfile": "oceania/hawaii.png", - "toolTipText": qsTr("Hawaii"), - "x": "0.722", - "y": "0.164" - } - ] -} diff --git a/src/activities/geography/resource/board/board9_0.qml b/src/activities/geography/resource/board/board9_0.qml index 097da7256..295c2e5e8 100644 --- a/src/activities/geography/resource/board/board9_0.qml +++ b/src/activities/geography/resource/board/board9_0.qml @@ -1,305 +1,357 @@ /* GCompris * * Copyright (C) 2015 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * Pulkit Gupta (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.0 QtObject { - property string instruction: qsTr("Africa") + property string instruction: qsTr("Asia") property variant levels: [ { - "pixmapfile": "africa/africa.png", + "pixmapfile": "asia/background.png", "type": "SHAPE_BACKGROUND_IMAGE" }, { - "pixmapfile": "africa/zimbabwe.png", - "sound": "voices-$CA/$LOCALE/geography/zimbabwe.$CA", - "toolTipText": qsTr("Zimbabwe"), - "x": "0.676", - "y": "0.783" + "pixmapfile": "asia/russia.png", + "toolTipText": qsTr("Russia"), + "x": "0.497", + "y": "0.215" }, { - "pixmapfile": "africa/zambia.png", - "sound": "voices-$CA/$LOCALE/geography/zambia.$CA", - "toolTipText": qsTr("Zambia"), - "x": "0.662", - "y": "0.704" + "pixmapfile": "asia/mongolia.png", + "toolTipText": qsTr("Mongolia"), + "x": "0.562", + "y": "0.341" }, { - "pixmapfile": "africa/tunisia.png", - "sound": "voices-$CA/$LOCALE/geography/tunisia.$CA", - "toolTipText": qsTr("Tunisia"), - "x": "0.39", - "y": "0.051" + "pixmapfile": "asia/japan.png", + "toolTipText": qsTr("Japan"), + "x": "0.855", + "y": "0.437" }, { - "pixmapfile": "africa/togo.png", - "sound": "voices-$CA/$LOCALE/geography/togo.$CA", - "toolTipText": qsTr("Togo"), - "x": "0.268", + "pixmapfile": "asia/north_korea.png", + "toolTipText": qsTr("North Korea"), + "x": "0.768", + "y": "0.415" + }, + { + "pixmapfile": "asia/south_korea.png", + "toolTipText": qsTr("South Korea"), + "x": "0.79", + "y": "0.459" + }, + { + "pixmapfile": "asia/kazakhstan.png", + "toolTipText": qsTr("Kazakhstan"), + "x": "0.293", + "y": "0.328" + }, + { + "pixmapfile": "asia/uzbekistan.png", + "toolTipText": qsTr("Uzbekistan"), + "x": "0.289", "y": "0.403" }, { - "pixmapfile": "africa/chad.png", - "sound": "voices-$CA/$LOCALE/geography/chad.$CA", - "toolTipText": qsTr("Chad"), - "x": "0.528", - "y": "0.306" + "pixmapfile": "asia/taiwan.png", + "toolTipText": qsTr("Taiwan"), + "x": "0.772", + "y": "0.603" }, { - "pixmapfile": "africa/tanzania.png", - "sound": "voices-$CA/$LOCALE/geography/tanzania.$CA", - "toolTipText": qsTr("Tanzania"), - "x": "0.763", - "y": "0.609" + "pixmapfile": "asia/vietnam.png", + "toolTipText": qsTr("Vietnam"), + "x": "0.661", + "y": "0.691" }, { - "pixmapfile": "africa/soudan.png", - "sound": "voices-$CA/$LOCALE/geography/soudan.$CA", - "toolTipText": qsTr("Sudan"), - "x": "0.69", - "y": "0.34" + "pixmapfile": "asia/cambodia.png", + "toolTipText": qsTr("Cambodia"), + "x": "0.658", + "y": "0.732" }, { - "pixmapfile": "africa/somalia.png", - "sound": "voices-$CA/$LOCALE/geography/somalia.$CA", - "toolTipText": qsTr("Somalia"), - "x": "0.925", - "y": "0.449" + "pixmapfile": "asia/laos.png", + "toolTipText": qsTr("Laos"), + "x": "0.644", + "y": "0.664" }, { - "pixmapfile": "africa/senegal.png", - "sound": "voices-$CA/$LOCALE/geography/senegal.$CA", - "toolTipText": qsTr("Senegal"), - "x": "0.049", - "y": "0.32" + "pixmapfile": "asia/thailand.png", + "toolTipText": qsTr("Thailand"), + "x": "0.627", + "y": "0.723" }, { - "pixmapfile": "africa/rep_congo.png", - "sound": "voices-$CA/$LOCALE/geography/democratic_republic_of_congo.$CA", - "toolTipText": qsTr("Democratic Republic of Congo"), - "x": "0.57", - "y": "0.577" + "pixmapfile": "asia/sri_lanka.png", + "toolTipText": qsTr("Sri Lanka"), + "x": "0.465", + "y": "0.785" }, { - "pixmapfile": "africa/rep_centrafrique.png", - "sound": "voices-$CA/$LOCALE/geography/rep_centrafrique.$CA", - "toolTipText": qsTr("Central African Republic"), - "x": "0.563", - "y": "0.425" + "pixmapfile": "asia/china.png", + "toolTipText": qsTr("China"), + "x": "0.577", + "y": "0.466" }, { - "pixmapfile": "africa/uganda.png", - "sound": "voices-$CA/$LOCALE/geography/uganda.$CA", - "toolTipText": qsTr("Uganda"), - "x": "0.725", - "y": "0.5" + "pixmapfile": "asia/india.png", + "toolTipText": qsTr("India"), + "x": "0.465", + "y": "0.624" }, { - "pixmapfile": "africa/nigeria.png", - "sound": "voices-$CA/$LOCALE/geography/nigeria.$CA", - "toolTipText": qsTr("Nigeria"), - "x": "0.385", - "y": "0.395" + "pixmapfile": "asia/bangladesh.png", + "toolTipText": qsTr("Bangladesh"), + "x": "0.532", + "y": "0.602" }, { - "pixmapfile": "africa/niger.png", - "sound": "voices-$CA/$LOCALE/geography/niger.$CA", - "toolTipText": qsTr("Niger"), - "x": "0.373", - "y": "0.277" + "pixmapfile": "asia/bhutan.png", + "toolTipText": qsTr("Bhutan"), + "x": "0.523", + "y": "0.561" }, { - "pixmapfile": "africa/namibia.png", - "sound": "voices-$CA/$LOCALE/geography/namibia.$CA", - "toolTipText": qsTr("Namibia"), - "x": "0.516", - "y": "0.84" + "pixmapfile": "asia/nepal.png", + "toolTipText": qsTr("Nepal"), + "x": "0.472", + "y": "0.55" }, { - "pixmapfile": "africa/mozambique.png", - "sound": "voices-$CA/$LOCALE/geography/mozambique.$CA", - "toolTipText": qsTr("Mozambique"), - "x": "0.768", - "y": "0.783" + "pixmapfile": "asia/pakistan.png", + "toolTipText": qsTr("Pakistan"), + "x": "0.344", + "y": "0.527" + }, + { + "pixmapfile": "asia/myanmar.png", + "toolTipText": qsTr("Myanmar"), + "x": "0.579", + "y": "0.65" + }, + { + "pixmapfile": "asia/philippines.png", + "toolTipText": qsTr("Philippines"), + "x": "0.8", + "y": "0.736" + }, + { + "pixmapfile": "asia/indonesia.png", + "toolTipText": qsTr("Indonesia"), + "x": "0.727", + "y": "0.9" + }, + { + "pixmapfile": "asia/malaysia.png", + "toolTipText": qsTr("Malaysia"), + "x": "0.699", + "y": "0.831" }, { - "pixmapfile": "africa/mauritania.png", - "sound": "voices-$CA/$LOCALE/geography/mauritania.$CA", - "toolTipText": qsTr("Mauritania"), - "x": "0.099", - "y": "0.231" + "pixmapfile": "asia/afghanistan.png", + "toolTipText": qsTr("Afghanistan"), + "x": "0.328", + "y": "0.487" }, { - "pixmapfile": "africa/moroco.png", - "sound": "voices-$CA/$LOCALE/geography/moroco.$CA", - "toolTipText": qsTr("Morocco"), - "x": "0.127", - "y": "0.123" + "pixmapfile": "asia/tajikistan.png", + "toolTipText": qsTr("Tajikistan"), + "x": "0.35", + "y": "0.429" }, { - "pixmapfile": "africa/mali.png", - "sound": "voices-$CA/$LOCALE/geography/mali.$CA", - "toolTipText": qsTr("Mali"), - "x": "0.2", - "y": "0.273" + "pixmapfile": "asia/kyrgyzstan.png", + "toolTipText": qsTr("Kyrgyzstan"), + "x": "0.371", + "y": "0.404" }, { - "pixmapfile": "africa/malawi.png", - "sound": "voices-$CA/$LOCALE/geography/malawi.$CA", - "toolTipText": qsTr("Malawi"), - "x": "0.751", - "y": "0.702" + "pixmapfile": "asia/turkmenistan.png", + "toolTipText": qsTr("Turkmenistan"), + "x": "0.26", + "y": "0.428" }, { - "pixmapfile": "africa/madagascar.png", - "sound": "voices-$CA/$LOCALE/geography/madagascar.$CA", - "toolTipText": qsTr("Madagascar"), - "x": "0.927", - "y": "0.781" + "pixmapfile": "asia/iran.png", + "toolTipText": qsTr("Iran"), + "x": "0.224", + "y": "0.505" }, { - "pixmapfile": "africa/libya.png", - "sound": "voices-$CA/$LOCALE/geography/libya.$CA", - "toolTipText": qsTr("Libya"), - "x": "0.502", - "y": "0.154" + "pixmapfile": "asia/azerbaijan.png", + "toolTipText": qsTr("Azerbaijan"), + "x": "0.163", + "y": "0.414" }, { - "pixmapfile": "africa/liberia.png", - "sound": "voices-$CA/$LOCALE/geography/liberia.$CA", - "toolTipText": qsTr("Liberia"), - "x": "0.117", - "y": "0.433" + "pixmapfile": "asia/georgia.png", + //: Translators: Strip Asia| and translate only Georgia + "toolTipText": qsTr("Asia|Georgia"), + "x": "0.133", + "y": "0.389" }, { - "pixmapfile": "africa/kenya.png", - "sound": "voices-$CA/$LOCALE/geography/kenya.$CA", - "toolTipText": qsTr("Kenya"), - "x": "0.81", - "y": "0.52" + "pixmapfile": "asia/turkey.png", + "toolTipText": qsTr("Turkey"), + "x": "0.077", + "y": "0.428" }, { - "pixmapfile": "africa/guinea.png", - "sound": "voices-$CA/$LOCALE/geography/guinea.$CA", - "toolTipText": qsTr("Guinea"), - "x": "0.094", - "y": "0.381" + "pixmapfile": "asia/syria.png", + "toolTipText": qsTr("Syria"), + "x": "0.108", + "y": "0.478" }, { - "pixmapfile": "africa/ghana.png", - "sound": "voices-$CA/$LOCALE/geography/ghana.$CA", - "toolTipText": qsTr("Ghana"), - "x": "0.237", - "y": "0.411" + "pixmapfile": "asia/iraq.png", + "toolTipText": qsTr("Iraq"), + "x": "0.15", + "y": "0.492" }, { - "pixmapfile": "africa/gabon.png", - "sound": "voices-$CA/$LOCALE/geography/gabon.$CA", - "toolTipText": qsTr("Gabon"), - "x": "0.427", + "pixmapfile": "asia/jordan.png", + "toolTipText": qsTr("Jordan"), + "x": "0.1", + "y": "0.517" + }, + { + "pixmapfile": "asia/saudi_arabia.png", + "toolTipText": qsTr("Saudi Arabia"), + "x": "0.167", + "y": "0.592" + }, + { + "pixmapfile": "asia/yemen.png", + "toolTipText": qsTr("Yemen"), + "x": "0.192", + "y": "0.692" + }, + { + "pixmapfile": "asia/united_arab_emirates.png", + "toolTipText": qsTr("United Arab Emirates"), + "x": "0.236", + "y": "0.598" + }, + { + "pixmapfile": "asia/oman.png", + "toolTipText": qsTr("Oman"), + "x": "0.255", + "y": "0.628" + }, + { + "pixmapfile": "asia/armenia.png", + "type": "SHAPE_BACKGROUND", + "x": "0.15", + "y": "0.415" + }, + { + "pixmapfile": "asia/kuwait.png", + "type": "SHAPE_BACKGROUND", + "x": "0.18", "y": "0.538" }, { - "pixmapfile": "africa/ethiopia.png", - "sound": "voices-$CA/$LOCALE/geography/ethiopia.$CA", - "toolTipText": qsTr("Ethiopia"), - "x": "0.845", - "y": "0.395" + "pixmapfile": "asia/cyprus.png", + "type": "SHAPE_BACKGROUND", + "x": "0.065", + "y": "0.472" + }, + { + "pixmapfile": "asia/lebanon.png", + "type": "SHAPE_BACKGROUND", + "x": "0.086", + "y": "0.487" + }, + { + "pixmapfile": "asia/bahrain.png", + "type": "SHAPE_BACKGROUND", + "x": "0.208", + "y": "0.575" }, { - "pixmapfile": "africa/eritrea.png", - "sound": "voices-$CA/$LOCALE/geography/eritrea.$CA", - "toolTipText": qsTr("Eritrea"), - "x": "0.831", - "y": "0.31" + "pixmapfile": "asia/qatar.png", + "type": "SHAPE_BACKGROUND", + "x": "0.214", + "y": "0.586" }, { - "pixmapfile": "africa/egypt.png", - "sound": "voices-$CA/$LOCALE/geography/egypt.$CA", - "toolTipText": qsTr("Egypt"), - "x": "0.683", - "y": "0.152" + "pixmapfile": "asia/brunei.png", + "type": "SHAPE_BACKGROUND", + "x": "0.744", + "y": "0.821" }, { - "pixmapfile": "africa/ivory_coast.png", - "sound": "voices-$CA/$LOCALE/geography/ivory_coast.$CA", - "toolTipText": qsTr("Ivory Coast"), - "x": "0.178", - "y": "0.417" + "pixmapfile": "asia/israel.png", + "type": "SHAPE_BACKGROUND", + "x": "0.08", + "y": "0.517" }, { - "pixmapfile": "africa/congo.png", - "sound": "voices-$CA/$LOCALE/geography/congo.$CA", - "toolTipText": qsTr("Republic of Congo"), - "x": "0.477", - "y": "0.528" + "pixmapfile": "asia/palestine.png", + "type": "SHAPE_BACKGROUND", + "x": "0.081", + "y": "0.516" }, { - "pixmapfile": "africa/cameroon.png", - "sound": "voices-$CA/$LOCALE/geography/cameroon.$CA", - "toolTipText": qsTr("Cameroon"), - "x": "0.441", - "y": "0.427" + "pixmapfile": "asia/red_sea.png", + "type": "SHAPE_BACKGROUND", + "x": "0.128", + "y": "0.662" }, { - "pixmapfile": "africa/burkina_faso.png", - "sound": "voices-$CA/$LOCALE/geography/burkina_faso.$CA", - "toolTipText": qsTr("Burkina Faso"), - "x": "0.232", - "y": "0.35" + "pixmapfile": "asia/africa2.png", + "type": "SHAPE_BACKGROUND", + "x": "0.176", + "y": "0.808" }, { - "pixmapfile": "africa/botswana.png", - "sound": "voices-$CA/$LOCALE/geography/botswana.$CA", - "toolTipText": qsTr("Botswana"), - "x": "0.608", - "y": "0.832" + "pixmapfile": "asia/africa.png", + "type": "SHAPE_BACKGROUND", + "x": "0.054", + "y": "0.769" }, { - "pixmapfile": "africa/benin.png", - "sound": "voices-$CA/$LOCALE/geography/benin.$CA", - "toolTipText": qsTr("Benin"), - "x": "0.291", - "y": "0.393" + "pixmapfile": "asia/persian_gulf.png", + "type": "SHAPE_BACKGROUND", + "x": "0.223", + "y": "0.563" }, { - "pixmapfile": "africa/angola.png", - "sound": "voices-$CA/$LOCALE/geography/angola.$CA", - "toolTipText": qsTr("Angola"), - "x": "0.514", - "y": "0.686" + "pixmapfile": "asia/mediteranean_sea.png", + "type": "SHAPE_BACKGROUND", + "x": "0.042", + "y": "0.485" }, { - "pixmapfile": "africa/algeria.png", - "sound": "voices-$CA/$LOCALE/geography/algeria.$CA", - "toolTipText": qsTr("Algeria"), - "x": "0.279", - "y": "0.128" + "pixmapfile": "asia/black_sea.png", + "type": "SHAPE_BACKGROUND", + "x": "0.059", + "y": "0.344" }, { - "pixmapfile": "africa/south_africa.png", - "sound": "voices-$CA/$LOCALE/geography/south_africa.$CA", - "toolTipText": qsTr("South Africa"), - "x": "0.606", - "y": "0.913" + "pixmapfile": "asia/caspian_sea.png", + "type": "SHAPE_BACKGROUND", + "x": "0.189", + "y": "0.398" } ] } diff --git a/src/activities/hangman/Hangman.qml b/src/activities/hangman/Hangman.qml index 9ce6d897f..e88fb66ef 100644 --- a/src/activities/hangman/Hangman.qml +++ b/src/activities/hangman/Hangman.qml @@ -1,409 +1,409 @@ /* GCompris - hangman.qml * * Copyright (C) 2015 Rajdeep Kaur * * Authors: * Bruno Coudoin (GTK+ version) * Rajdeep kaur (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 QtGraphicalEffects 1.0 import "../../core" import "hangman.js" as Activity import "qrc:/gcompris/src/core/core.js" as Core 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/hangman/resource/" 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 anchors.fill: parent sourceSize.width: Math.max(parent.width, parent.height) // system locale by default property string locale: "system" readonly property string wordsResource: "data2/words/words.rcc" property bool englishFallback: false signal start signal stop Component.onCompleted: { dialogActivityConfig.getInitialConfiguration() 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 Item ourActivity: activity property alias bar: bar property alias bonus: bonus property alias keyboard: keyboard property alias hidden: hidden property alias textinput: textinput property alias wordImage: wordImage property alias score: score property alias parser: parser property alias locale: background.locale property alias ok: ok - property int remainingLife + property int remainingLife property variant goodWord property int goodWordIndex property alias englishFallbackDialog: englishFallbackDialog function playWord() { var locale = ApplicationInfo.getVoicesLocale(items.locale) if(activity.audioVoices.append( ApplicationInfo.getAudioFilePathForLocale(goodWord.voice, locale))) bonus.interval = 2500 else bonus.interval = 500 } onRemainingLifeChanged: { if(remainingLife == 3) { playWord(); } } } onStart: { focus = true Activity.start(items) Activity.focusTextInput() } onStop: { Activity.stop(); } GCText { id: hidden fontSize: largeSize - color: "black" + color: "#4d4d4d" font.letterSpacing: 0.5 width: parent.width * 0.9 wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter anchors { horizontalCenter: parent.horizontalCenter bottom: bar.top bottomMargin: 5 * ApplicationInfo.ratio } z: 11 } 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 enabled: !ApplicationInfo.isMobile visible: false focus: true onTextChanged: { if (text != "") { Activity.processKeyPress(text); text = ""; } } onAccepted: if(items.remainingLife === 0) Activity.nextSubLevel() } Item { id: imageframe width: Math.min(300 * ApplicationInfo.ratio, background.width * 0.8, hidden.y) height: width anchors.horizontalCenter: parent.horizontalCenter y: 5 * ApplicationInfo.ratio z: 10 Image { id: wordImage smooth: true visible: false anchors.fill: parent property string nextSource function changeSource(nextSource_) { nextSource = nextSource_ animImage.start() } SequentialAnimation { id: animImage PropertyAnimation { target: wordImage property: "opacity" to: 0 duration: 100 } PropertyAction { target: wordImage property: "source" value: wordImage.nextSource } PropertyAnimation { target: wordImage property: "opacity" to: 1 duration: 100 } } } Image { id: threshmask smooth: true visible: false width: 1.3*parent.width height: 1.2*parent.height source: dataSetUrl + "fog.png" } ThresholdMask { id: thresh anchors.fill: wordImage source: wordImage maskSource: threshmask spread: 0.4 // remainingLife between 0 and 6 => threshold between 0 and 0.9 threshold: 0.15 * items.remainingLife } } 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 label: qsTr("Select your locale") } } } } } 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) } } Score { id: score anchors.top: undefined anchors.topMargin: 10 * ApplicationInfo.ratio anchors.right: parent.right anchors.rightMargin: 10 * ApplicationInfo.ratio anchors.bottom: keyboard.top } BarButton { id: ok source: "qrc:/gcompris/src/core/resource/bar_ok.svg"; sourceSize.width: 75 * ApplicationInfo.ratio visible: false anchors { bottom: score.top horizontalCenter: score.horizontalCenter bottomMargin: 10 * ApplicationInfo.ratio } onClicked: Activity.nextSubLevel() } JsonParser { id: parser onError: console.error("Hangman: Error parsing json: " + msg); } Image { id: clock anchors { left: parent.left top: parent.top - margins:10 - + margins: 10 } sourceSize.width: 66 * bar.barZoom - property int remainingife: items.remainingLife - onRemainingifeChanged: clockAnim.start() + property int remainingLife: items.remainingLife + onRemainingLifeChanged: if(remainingLife >= 0) clockAnim.restart() SequentialAnimation { id: clockAnim + alwaysRunToEnd: true ParallelAnimation { NumberAnimation { target: clock; properties: "opacity"; to: 0; duration: 800; easing.type: Easing.OutCubic } NumberAnimation { target: clock; properties: "rotation"; from: 0; to: 180; duration: 800; easing.type: Easing.OutCubic } } PropertyAction { target: clock; property: 'source'; value: "qrc:/gcompris/src/activities/reversecount/resource/" + "flower" + items.remainingLife + ".svg" } ParallelAnimation { NumberAnimation { target: clock; properties: "opacity"; to: 1; duration: 800; easing.type: Easing.OutCubic } NumberAnimation { target: clock; properties: "rotation"; from: 180; to: 0; duration: 800; easing.type: Easing.OutCubic } } } } VirtualKeyboard { id: keyboard anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter width: parent.width onKeypress: Activity.processKeyPress(text); onError: console.log("VirtualKeyboard error: " + msg); } Bonus { id: bonus interval: 2000 onLoose: ok.visible = true onWin: Activity.nextSubLevel() } Loader { id: englishFallbackDialog sourceComponent: GCDialog { parent: activity.main message: qsTr("We are sorry, we don't have yet a translation for your language.") + " " + qsTr("GCompris is developed by the KDE community, you can translate GCompris by joining a translation team on %2").arg("http://l10n.kde.org/") + "

" + qsTr("We switched to English for this activity but you can select another language in the configuration dialog.") onClose: background.englishFallback = false } anchors.fill: parent focus: true active: background.englishFallback onStatusChanged: if (status == Loader.Ready) item.start() } } } diff --git a/src/activities/hangman/hangman.svg b/src/activities/hangman/hangman.svg index a05d94f01..9563213f1 100644 --- a/src/activities/hangman/hangman.svg +++ b/src/activities/hangman/hangman.svg @@ -1,209 +1,123 @@ - - - - - + id="defs5891" /> + showgrid="true" + inkscape:window-maximized="1"> + + image/svg+xml - + - - - - - - - - - - - - - + transform="translate(1.8662613,-970.80487)" + id="layer1-6" + inkscape:label="Calque 1"> + + + + style="fill:#1bd0d2;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path16" + d="m 72.787374,1006.9868 c 3.260904,-0.1482 6.745102,1.8209 7.622731,5.0962 1.012475,3.7786 -1.236509,7.6663 -5.021619,8.6805 -0.806511,0.2161 -1.548489,0.1598 -2.331963,0.095 l -14.997398,-3.9144 c 0.51857,-1.9139 0.553648,-3.9826 0.0045,-6.0319 -0.54911,-2.0493 -1.613848,-3.8234 -3.019882,-5.2215 L 66.14953,994.4582 c -0.0067,0.012 -0.02007,0.035 -0.02682,0.047 0.587605,-0.3732 1.248032,-0.6579 1.953731,-0.847 3.785104,-1.0142 7.676579,1.228 8.689053,5.0066 0.916867,3.4218 -0.834345,6.9309 -3.978103,8.3224 z" /> + style="fill:#cc77d6;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path24" + d="m 20.479298,988.89085 c -0.275158,-0.75776 -0.436456,-1.58181 -0.436456,-2.44375 0,-3.91188 3.17855,-7.08496 7.097181,-7.08496 3.463197,0 6.319149,2.27325 6.935883,5.55052 l -0.03796,15.80854 c -4.317136,0 -8.083861,2.3396 -10.104945,5.8252 l -13.425813,-7.6817 c -0.08539,-0.066 -0.1613,-0.1326 -0.237205,-0.1989 -1.4801614,-1.2976 -2.4194943,-3.2015 -2.4194943,-5.33265 0,-3.91188 3.1785513,-7.08495 7.0971823,-7.08495 2.239218,-0.01 4.231742,1.02295 5.531627,2.64265 z" /> + + + + + + - - - - - - - - - - - - - - diff --git a/src/activities/hangman/resource/background.svg b/src/activities/hangman/resource/background.svg index c1b0abe1c..79acb2e37 100644 --- a/src/activities/hangman/resource/background.svg +++ b/src/activities/hangman/resource/background.svg @@ -1,1099 +1,1189 @@ + gradientTransform="matrix(0.35274105,0,0,0.3163348,259.64528,546.65812)" /> - - - - - - - - - - - - - + gradientTransform="matrix(1,0,0,1.0859179,1.3651696,-53.897354)" /> + + + + + image/svg+xml + inkscape:label="Calque 1" + style="display:inline"> + + transform="matrix(0.31415435,0,0,0.31415435,212.01338,546.13833)"> - - - + inkscape:connector-curvature="0" /> - - + d="m 172.61753,687.50351 c -1.32928,0.19124 -3.85612,-2.24835 -5.14272,-1.94426 -1.30056,0.30741 9.36644,-1.24383 8.11662,-0.82647 -1.26003,0.42076 -14.04652,3.51476 -15.24769,4.04176 -1.20797,0.53 -2.19772,2.87662 -3.33873,3.50846 -1.14456,0.63382 2.61001,-3.63365 1.54033,-2.90302 -1.07093,0.73148 2.31434,6.4679 1.32601,7.29073 -0.98721,0.82192 -0.71259,2.20348 -1.60988,3.11087 -0.8944,0.90447 -10.44121,-4.69198 -11.23878,-3.7082 -0.79316,0.97832 3.60052,4.00836 2.91047,5.05955 -0.68446,1.04268 1.98704,4.20674 1.41123,5.31569 -0.56953,1.09683 -6.28005,1.50411 -6.73636,2.66054 -1.3263,0.44124 -0.003,0.66718 -1.25837,1.19648 -1.28074,0.5398 -7.30215,2.76977 -8.50521,3.39506 -1.22498,0.63666 -0.24509,0.34848 -1.38492,1.06729 -1.15907,0.73093 -2.76174,0.11964 -3.82792,0.92869 -1.08272,0.82158 -8.15687,-0.68459 -9.13874,0.21041 -0.9957,0.9076 -4.99431,3.77158 -5.881,4.74721 -0.89783,0.98789 9.62824,0.41995 8.84767,1.46985 -0.78886,1.06105 -2.88257,6.65523 -3.54597,7.77163 -0.6692,1.12611 -9.68459,-3.76166 -10.2203,-2.58745 -0.53874,1.18085 1.19099,7.15912 0.79319,8.38024 -0.39872,1.22399 1.83217,0.59286 1.58106,1.84885 -0.25057,1.2533 2.79858,4.79465 2.70097,6.07141 -0.0969,1.26746 0.37213,-3.99655 0.43182,-2.71425 0.0588,1.26552 -3.52411,9.42578 -3.30699,10.6978 0.22441,1.30298 -3.58658,2.21812 -3.20909,3.46375 0.38396,1.26697 -4.25864,-2.11677 -3.72575,-0.91472 0.53847,1.21466 8.35775,5.21784 9.03855,6.36042 0.68385,1.14771 1.70476,3.12333 2.52229,4.19244 0.81729,1.06877 6.92571,5.00435 7.86667,5.98868 0.93711,0.9803 -4.30784,-4.83737 -3.25787,-3.94665 1.04267,0.88456 6.90797,1.78573 8.05231,2.57623 1.13382,0.78323 -4.77949,7.6073 -3.55525,8.29262 1.2112,0.67804 7.41238,1.25906 8.70298,1.8359 1.27535,0.56992 3.32805,-2.66945 4.67215,-2.20357 1.32664,0.45992 -3.93465,0.8802 -2.54949,1.23374 1.36606,0.34853 9.82769,6.25191 11.24258,6.49236 1.39349,0.23672 5.16659,-0.59867 6.59971,-0.47153 1.40975,0.12502 2.03648,-1.12314 3.47719,-1.10855 1.41531,0.0138 6.28316,0.41044 7.72133,0.31397 1.41034,-0.0948 8.42859,-2.45709 9.85432,-2.66208 1.19007,-0.17347 -0.67469,-3.58719 0.49463,-3.83605 1.17347,-0.24971 -5.8761,-0.25804 -4.72878,-0.58197 1.15103,-0.3249 5.97616,0.77334 7.09556,0.37529 1.12245,-0.39901 -3.85101,2.31539 -2.76573,1.84471 1.08792,-0.47195 5.5458,0.57463 6.59098,0.0324 1.04235,0.71824 9.85542,-3.59877 10.99885,-2.98217 1.12304,0.60555 -6.72516,3.80975 -5.5168,4.31482 1.18553,0.49559 8.90699,-2.45146 10.16316,-2.0549 1.2325,0.38911 2.06509,4.9067 3.35473,5.19826 1.26653,0.28634 -0.22947,-0.82799 1.08188,-0.6377 1.28948,0.1871 1.46041,4.68716 2.78344,4.77948 1.30268,0.0905 3.58688,-4.5997 4.91275,-4.60257 1.30763,0 5.87156,2.54606 7.19281,2.45011 1.30392,-0.0948 5.31611,-4.70115 6.62472,-4.88814 1.4498,-0.2084 3.84926,-1.16903 5.24067,-1.47838 1.42604,-0.31701 -2.41574,-1.73399 -1.05829,-2.15004 1.39179,-0.42659 0.60095,1.23253 1.91276,0.70957 1.34622,-0.5367 7.2545,-1.74315 8.50801,-2.37323 1.28757,-0.64719 -1.43516,1.24974 -0.25458,0.51299 1.21445,-0.7579 5.50194,-3.36896 6.59317,-4.21196 1.12348,-0.86791 -6.44319,-0.78334 -5.46122,-1.73091 1.01175,-0.97628 2.35955,-3.83656 3.20917,-4.88583 0.87448,-1.07999 7.57781,-1.70961 8.26753,-2.85432 0.70748,-1.17419 4.62336,3.56784 5.12239,2.33918 0.50808,-1.25094 -0.56139,-10.43542 -0.28399,-11.72838 0.27861,-1.29995 -2.98645,3.52273 -2.9565,2.19507 0.0296,-1.31221 6.55839,-1.49223 6.33022,-2.81713 -0.22902,-1.31381 -11.65178,-3.13254 -12.12839,-4.37945 -0.47588,-1.24502 5.2153,-6.48395 4.50668,-7.64757 -0.697,-1.14454 -7.78163,-2.0585 -8.69031,-3.11018 -0.88418,-1.02334 -1.44069,1.65291 -2.51278,0.73055 -1.03587,-0.89118 7.05381,-0.32272 5.85384,-1.10781 -1.15518,-0.75578 -9.49473,-9.2426 -10.79188,-9.88949 -1.24621,-0.6215 -4.38262,4.55604 -5.7509,4.04441 0.10296,-1.03302 6.89731,-5.87744 6.72658,-6.89742 -0.20471,-1.18148 1.83842,3.37061 1.29644,2.30378 -0.54318,-1.06923 -7.92425,-2.42247 -8.76628,-3.33254 -0.82434,-0.89091 5.87808,-8.13472 4.80522,-8.83134 -1.03303,-0.67074 -1.70066,-1.2048 -2.93002,-1.65782 -0.25739,-1.28853 -10.15014,-0.56009 -10.54141,-1.79187 -0.39879,-1.25545 4.13096,0.0259 3.60166,-1.16508 -0.53725,-1.20883 -6.79315,-1.96268 -7.45589,-3.09924 -0.67021,-1.14936 -2.8199,-1.70146 -3.60915,-2.77088 -0.79569,-1.07818 6.43348,-5.54707 5.52632,-6.53781 -0.91203,-0.99607 -5.22619,0.52585 -6.24118,-0.37552 -1.01808,-0.90416 4.98062,-0.78541 3.86878,-1.58793 -1.11309,-0.80341 -13.4908,-2.55263 -14.68801,-3.24779 -1.19601,-0.69447 8.12145,-0.36433 6.85131,-0.94439 -1.26612,-0.57821 -2.49147,-6.09297 -3.82149,-6.55119 -1.32289,-0.45575 -9.77417,3.86652 -11.15066,3.53573 -1.36539,-0.32812 -0.28374,-3.20555 -1.6925,-3.40462 -1.39281,-0.19682 -7.28999,-2.2203 -8.71609,-2.28509 -1.4052,-0.0639 -4.3714,2.32419 -5.80021,2.39419 -1.40186,0.0687 3.6811,1.69561 2.26476,1.89848 l -6.91353,-0.34149" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5ba217;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + id="path5494" + d="m 9.2210477,647.2487 c -1.7894065,0.23945 -3.0503405,1.43286 -4.7822791,1.81361 -1.7507471,0.38491 6.6092644,1.0956 4.9268124,1.61817 -1.6961745,0.52684 -13.2019197,-0.54106 -14.818855,0.11881 -1.626113,0.66362 -3.412007,2.81628 -4.947976,3.60741 -1.540746,0.79361 -2.713167,0.17667 -4.153115,1.0915 -1.441617,0.91589 7.266356,1.93834 5.93593,2.96861 -1.328949,1.02913 -5.031962,4.22052 -6.239829,5.35666 -1.203997,1.13251 -8.748341,-0.19932 -9.821991,1.03246 -1.067705,1.22497 4.981771,4.91579 4.052877,6.23199 -0.921377,1.30554 -3.473229,2.85665 -4.248374,4.24517 -0.766662,1.37335 -0.981556,-0.0749 -1.595801,1.37305 -1.785401,0.55246 0.06417,2.98773 -1.626306,3.65047 -1.724073,0.67589 -10.97707,-0.43721 -12.596572,0.34571 -1.649013,0.79717 2.336533,1.89685 0.802127,2.79688 -1.560259,0.91519 -6.5401,1.55395 -7.975338,2.56695 -1.457502,1.02871 -4.200846,2.13338 -5.522586,3.25401 -1.340367,1.13642 -6.707476,4.49413 -7.901099,5.71573 -1.2086,1.23693 6.258773,3.0605 5.208024,4.37508 -1.061925,1.32855 0.286741,1.8719 -0.606303,3.26973 -0.900831,1.41002 -13.101276,2.8302 -13.822408,4.30042 -0.725233,1.47857 1.273701,1.29927 0.738213,2.82825 -0.536743,1.53255 -2.108862,3.31609 -2.446894,4.88871 -0.337309,1.56928 3.872733,5.72264 3.741334,7.32127 -0.130444,1.58699 3.519386,0.54871 3.599754,2.15429 0.07933,1.58455 -7.341088,5.48492 -7.048847,7.07763 0.302104,1.63146 0.327552,3.14377 0.835701,4.70342 0.516863,1.58638 -0.211149,2.64415 0.50619,4.14924 0.724867,1.52088 12.790641,2.12763 13.707087,3.55826 0.920556,1.43706 1.62451,2.54616 2.725027,3.88479 1.100178,1.33821 1.551091,2.28293 2.817757,3.51542 1.261503,1.22745 2.318178,2.30917 3.731588,3.42446 1.403604,1.10755 -0.539088,1.65614 1.001349,2.64593 1.526299,0.98069 -1.661125,4.56068 -0.01313,5.41878 1.630446,0.84897 10.025141,1.75935 11.762474,2.48157 1.716807,0.71369 0.316483,1.57228 2.125856,2.15568 1.785817,0.5758 -1.403286,-1.14948 0.461335,-0.70686 1.838922,0.43651 3.562446,2.18931 5.467107,2.49026 1.875844,0.29639 4.606719,0.84911 6.535902,1.00826 1.897741,0.15655 2.434291,-0.87474 4.373702,-0.85648 1.905191,0.0179 14.3079466,-0.84055 16.2439322,-0.96128 1.8985326,-0.11838 5.1193464,0.54046 7.0385887,0.28382 1.6020159,-0.21718 2.7168241,-0.97699 4.2909021,-1.28853 1.579666,-0.31265 -5.0585971,-1.40317 -3.5141455,-1.80875 1.5494795,-0.40688 4.4779555,1.93816 5.9848285,1.43987 1.510974,-0.49965 -0.453509,-1.6407 1.007429,-2.23011 1.464508,-0.59085 1.819554,-2.14223 3.226517,-2.82113 1.403151,0.89931 11.395625,0.11911 12.934846,0.89111 1.511776,0.75824 -2.125422,1.45411 -0.498778,2.08652 1.595907,0.62046 11.235313,2.21842 12.926296,2.7149 1.659136,0.48714 3.721551,1.18048 5.457591,1.54555 1.704937,0.35854 -0.03976,-0.3787 1.725502,-0.14046 1.735837,0.23428 -0.728852,3.22563 1.052148,3.34116 1.753594,0.11376 0.202947,-0.57609 1.98777,-0.57977 1.760243,-0.004 14.656661,-0.50015 16.43524,-0.62024 1.755293,-0.11852 0.535537,-1.85666 2.297121,-2.09074 1.951648,-0.26098 14.537205,-1.8032 16.410251,-2.19056 1.919667,-0.397 -2.618545,-1.81286 -0.791242,-2.33378 1.873558,-0.53412 0.72036,1.50245 2.486249,0.84759 1.8122,-0.67203 9.915653,-4.05039 11.603063,-4.83929 1.73327,-0.81035 -2.2584,0.5576 -0.66917,-0.3649 1.63481,-0.94897 14.22189,-2.49278 15.69083,-3.5483 1.51237,-1.08673 -7.84369,-3.26287 -6.52182,-4.44932 1.36198,-1.22242 2.14269,-2.27629 3.28639,-3.59009 1.17719,-1.35226 3.83521,-3.28503 4.76368,-4.71832 0.95238,-1.47022 7.56375,-0.40187 8.23554,-1.94029 0.68395,-1.5663 -0.005,-6.07672 0.36826,-7.69564 0.37506,-1.62766 -5.87356,-1.35836 -5.83326,-3.02073 0.0398,-1.64301 9.33272,-2.55543 9.02558,-4.21435 -0.30832,-1.64502 -10.02212,-3.85785 -10.6637,-5.41911 -0.64061,-1.5589 1.84193,-2.23422 0.88802,-3.69119 -0.93826,-1.43308 -4.99465,-3.48155 -6.21787,-4.79836 -1.19024,-1.28133 -1.7638,-2.23387 -3.207,-3.38876 -1.39442,-1.11585 6.5518,-2.37383 4.93648,-3.35684 -1.55505,-0.94632 -12.6183,-3.63549 -14.36445,-4.44546 -1.67759,-0.77819 -2.729848,0.70461 -4.571752,0.064 0.138608,-1.29345 5.375392,-2.32175 5.145562,-3.59887 -0.27558,-1.47933 3.03258,-3.75621 2.303,-5.092 -0.7312,-1.33878 -22.676764,-0.67596 -23.810285,-1.81546 -1.109665,-1.11551 6.719008,-3.83919 5.274766,-4.71143 -1.390606,-0.83984 -0.565559,-0.39821 -2.220459,-0.96544 -0.346477,-1.61337 -9.701834,-1.84479 -10.228541,-3.38711 -0.536829,-1.57195 -1.132903,-3.10057 -1.845417,-4.59176 -0.723216,-1.51359 -1.564408,-2.98831 -2.456545,-4.4114 -0.902192,-1.43912 -4.731518,-3.9003 -5.793954,-5.23933 -1.071131,-1.34999 3.12156,-1.37374 1.900405,-2.61424 -1.227727,-1.24718 -7.868056,-3.70717 -9.234362,-4.83579 -1.370494,-1.13209 8.510779,-3.00678 7.014067,-4.01162 -1.49839,-1.00595 -12.593571,-0.27837 -14.205199,-1.14879 -1.610016,-0.86955 5.796155,-3.56875 4.086373,-4.29505 -1.704396,-0.72399 -2.988896,10e-4 -4.779306,-0.57258 -1.780789,-0.57064 -14.919817,-1.86666 -16.772771,-2.28085 -1.838025,-0.41083 5.760467,0.6785 3.864087,0.42924 -1.874938,-0.24644 -9.713705,-2.99192 -11.633468,-3.07304 -1.891594,-0.0799 -5.692944,2.36988 -7.616336,2.45754 -1.887106,0.086 -2.581304,0.4937 -4.487914,0.74771 l -1.645394,-0.36639" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4a8c0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> - + d="m -38.569461,801.16621 c 303.398321,-39.62014 474.903651,66.8774 854.461901,75.88501 l 0,230.69278 -864.351506,-7.9117 z" + style="fill:#4da849;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="opacity:0.69800002;fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#4fa04b;fill-opacity:1;stroke:none"> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="display:inline;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="opacity:0.69800002;fill:#4fa04b;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="display:inline;opacity:0.69777778;fill:#3c8239;fill-opacity:1"> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + style="fill:#3c8239;fill-opacity:1;stroke:none" /> + + + + + + + + + - - - - - + + + + - - - - - - - - - - - - - - - + id="g13469" + transform="translate(-6,28)"> + transform="translate(75.856569,7.2237764)" + id="g13379"> + + + + + + + + + + + + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" + d="m 466.23472,274.72247 c 1.69739,12.0305 -6.00763,19.47918 -17.02848,19.63108 -11.02085,0.15185 -18.77629,-7.00415 -17.61742,-19.09838 1.23108,-12.8478 5.97276,-26.00739 16.99361,-26.15932 11.02085,-0.15185 16.08625,14.5271 17.65229,25.62662 z" + id="path3829" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssss" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b28b16;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" + d="m 460.8797,254.39683 c 0.0347,2.52125 -7.08534,9.12755 -12.09745,9.19663 -5.01211,0.069 -12.31504,-6.58832 -12.34634,-8.85968 -0.0278,-2.01532 5.36782,-7.62899 12.11777,-7.72202 6.74998,-0.093 12.29598,5.20505 12.32602,7.38509 z" + id="path3792" + inkscape:connector-curvature="0" + sodipodi:nodetypes="szszs" /> + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#f1c43c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" + d="m 459.19896,254.52149 c 0.03,2.17424 -6.11019,7.87128 -10.43244,7.93086 -4.32226,0.0597 -10.62006,-5.68155 -10.64707,-7.64029 -0.0248,-1.73795 3.47921,-7.19531 10.44125,-7.29126 6.96207,-0.096 10.61235,5.12072 10.63823,7.00072 z" + id="path3792-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="szszs" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - diff --git a/src/activities/lang/resource/content-ca.json b/src/activities/lang/resource/content-ca.json index d91e3feca..4256834c9 100644 --- a/src/activities/lang/resource/content-ca.json +++ b/src/activities/lang/resource/content-ca.json @@ -1,582 +1,585 @@ { "ate.ogg": "menjar", "bake.ogg": "cuinar", "bark.ogg": "bordar", "beg.ogg": "demanar", "bite.ogg": "mossegar", "blink.ogg": "picada d'ullet", "boil.ogg": "bullir", "break.ogg": "trencar", "call.ogg": "trucada", "catch.ogg": "pescar", "centipede.ogg": "centpeus", "chat.ogg": "parlar", "chop.ogg": "tallar", "clap.ogg": "picar de mans", "clean.ogg": "rentar", "crawl.ogg": "gatejar", "croak.ogg": "raucar", "cry.ogg": "plorar", "cut.ogg": "tallar", "dig.ogg": "cavar", "drank.ogg": "beure", "draw.ogg": "dibuix", "dream.ogg": "somiar", "drive.ogg": "conduir", "drool.ogg": "bavejar", "dry.ogg": "assecar", "eat.ogg": "menjar", "fell.ogg": "caure", "fetch.ogg": "informar", "find.ogg": "trobar", "float.ogg": "flotador", "fly.ogg": "volar", "freeze.ogg": "congelar", "growl.ogg": "grunyir", "hatch.ogg": "sortir de l'ou", "hear.ogg": "sentir", "howl.ogg": "udolar", "hug.ogg": "abraçar", "jump.ogg": "saltar", "kneel.ogg": "agenollar", "knit.ogg": "punt de mitja", "lick.ogg": "llepar", "look.ogg": "mirar-se", "meet.ogg": "trobar-se", "nap.ogg": "migdiada", "peck.ogg": "picotejar", "play.ogg": "jugar", "plow.ogg": "llaurar", "pounce.ogg": "saltar", "quarrel.ogg": "baralla", "read.ogg": "llegir", "rip.ogg": "estripar", "run.ogg": "córrer", "sat.ogg": "seure", "scared.ogg": "espantat", "scratch.ogg": "esgarrapar", "scream.ogg": "cridar", "scribble.ogg": "gargot", "see.ogg": "mirar", "shake.ogg": "sacsejar", "sing.ogg": "cantar", "sip.ogg": "xarrupar", "sit.ogg": "seure", "sleep.ogg": "dormir", "smell.ogg": "olorar", "smooch.ogg": "bessar", "sniff.ogg": "ensumar", "spill.ogg": "vessar", "splash.ogg": "doll d'aigua", "spray.ogg": "ruixar", "spread.ogg": "untar", "spring.ogg": "botar", "squat.ogg": "ajupir", "sting.ogg": "fibló", "stop.ogg": "aturar", "stretch.ogg": "estiraments", "study.ogg": "estudiar", "teach.ogg": "ensenyar", "tear.ogg": "estripar", "think.ogg": "pensar", "touch.ogg": "tocar", "wag.ogg": "moure la cua", "walk.ogg": "caminar", "wash.ogg": "banyar", "whisper.ogg": "xiuxiuejar", "win.ogg": "guanyar", "back.ogg": "esquena", "braid.ogg": "trena", "brain.ogg": "cervell", "bump.ogg": "bony", "chin.ogg": "barbeta", "ear.ogg": "orella", "face.ogg": "cara", "feet.ogg": "peu", "fist.ogg": "puny", "foot.ogg": "peu", "grin.ogg": "somriure", "hair.ogg": "cabell", "hand.ogg": "mà", "head.ogg": "cap", "hip.ogg": "maluc", "knee.ogg": "genoll", "lap.ogg": "a la falda", "lip.ogg": "llavis", "mouth.ogg": "boca", "neck.ogg": "coll", "nose.ogg": "nas", "scar.ogg": "cicatriu", "skin.ogg": "pell", "stare.ogg": "mirar fixament", "sweat.ogg": "suor", "teeth.ogg": "dents", "thigh.ogg": "cuixa", "throat.ogg": "gola", "wrist.ogg": "canell", "bib.ogg": "pitet", "cap.ogg": "gorra", "cape.ogg": "capa", "coat.ogg": "abric", "dress.ogg": "vestit", "glove.ogg": "guants", "hat.ogg": "barret", "patch.ogg": "pedaç", "scarf.ogg": "bufanda", "shirt.ogg": "camisa", "shoe.ogg": "sabata", "short.ogg": "pantalons curts", "skirt.ogg": "faldilla", "sleeve.ogg": "màniga", "smock.ogg": "brusa", "sneaker.ogg": "sabatilla deportiva", "sock.ogg": "mitjó", "suit.ogg": "vestit", "zoo.ogg": "zoològic", "danger.ogg": "perill", "frown.ogg": "envejar", "fun.ogg": "divertit", "mad.ogg": "ira", "rage.ogg": "ràbia", "sad.ogg": "trist", "smile.ogg": "somriure", "whisk.ogg": "batedora", "chief.ogg": "indi", "clown.ogg": "pallasso", "coach.ogg": "entrenador", "cowboy.ogg": "vaquer", "hunter.ogg": "caçador", "judge.ogg": "jutge", "knight.ogg": "cavaller", "lad.ogg": "mosso", "pope.ogg": "papa", "prince.ogg": "príncep", "princess.ogg": "princesa", "queen.ogg": "reina", "teacher.ogg": "professora", "vet.ogg": "veterinari", "boy.ogg": "noi", "bride.ogg": "núvia", "brother.ogg": "germà", "child.ogg": "nen", "dad.ogg": "pare", "friend.ogg": "amics", "girl.ogg": "dona", "gnome.ogg": "gnom", "mate.ogg": "amics", "men.ogg": "multitud", "pal.ogg": "col·legues", "athlete.ogg": "atleta", "ballet.ogg": "ballet", "camp.ogg": "acampar", "cheer.ogg": "animar", "climb.ogg": "escalada", "dance.ogg": "ballar", "dive.ogg": "immersió", "explore.ogg": "exploradors", "hike.ogg": "caminada", "hit.ogg": "pegar", "hop.ogg": "saltar", "jog.ogg": "fúting", "lift.ogg": "aixecar", "ran.ogg": "córrer", "ride.ogg": "anar amb bicicleta", "skate.ogg": "patinar", "ski.ogg": "esquiar", "sport.ogg": "esport", "swim.ogg": "nedar", "write.ogg": "escriure", "alligator.ogg": "caiman", "animal.ogg": "animals", "bait.ogg": "esquer", "bat.ogg": "ratpenat", "bee.ogg": "abella", "beetle.ogg": "escarabat", "bird.ogg": "ocell", "bug.ogg": "insecte", "camel.ogg": "camell", "cat.ogg": "gat", "chick.ogg": "pollet", "chicken.ogg": "pollastre", "chimp.ogg": "ximpanzé", "clam.ogg": "cloïssa", "claw.ogg": "urpa", "cow.ogg": "vaca", "crab.ogg": "cranc", "crocodile.ogg": "cocodril", "crow.ogg": "corb", "den.ogg": "cau", "dog.ogg": "gos", "dragon.ogg": "drac", "duck.ogg": "ànec", "fin.ogg": "aleta", "fish.ogg": "peix", "flies.ogg": "mosca", "fox.ogg": "guineu", "frog.ogg": "granota", "fur.ogg": "pell", "giraffe.ogg": "girafa", "goat.ogg": "cabra", "hen.ogg": "gallina", "herd.ogg": "ramat", "hound.ogg": "empaita", "lamb.ogg": "xai", "mane.ogg": "cabellera", "mice.ogg": "ratolins", "mole.ogg": "talp", "mosquito.ogg": "mosquit", "mule.ogg": "mula", "owl.ogg": "òliba", "ox.ogg": "bou", "paw.ogg": "pota", "pet.ogg": "mascota", "pig.ogg": "porc", "pug.ogg": "carlí", "puppy.ogg": "cadell", "rat.ogg": "rata", "shark.ogg": "tauró", "shell.ogg": "closca", "shrimp.ogg": "gamba", "skunk.ogg": "mofeta", "slime.ogg": "bava", "snail.ogg": "cargol", "snake.ogg": "serp", "spider.ogg": "aranya", "spike.ogg": "eriçó", "squid.ogg": "calamar", "squirrel.ogg": "esquirol", "starfish.ogg": "estrella de mar", "swan.ogg": "cigne", "tick.ogg": "paparra", "wing.ogg": "ala", "yum.ogg": "saborós", "bone.ogg": "os", "bread.ogg": "pans", "bun.ogg": "brioix", "cake.ogg": "pastís", "candy.ogg": "caramel", "cheese.ogg": "formatge", "chocolate.ogg": "xocolata", "cookie.ogg": "galetes", "crumb.ogg": "engrunes", "crust.ogg": "crosta", "drink.ogg": "tassa", "feast.ogg": "banquet", "flour.ogg": "farina", "food.ogg": "hamburguesa", "fudge.ogg": "dolços de xocolata", "gum.ogg": "xiclet", "ice.ogg": "glaçó", "juice.ogg": "suc", "lunch.ogg": "aperitiu", "pop.ogg": "crispetes", "rice.ogg": "arròs", "sandwich.ogg": "sandvitx", "sauce.ogg": "salsa", "snack.ogg": "mos", "spaghetti.ogg": "espagueti", "sprinkle.ogg": "espurnes", "stew.ogg": "guisat", "treat.ogg": "dolços", "cherry.ogg": "cireres", "fruit.ogg": "fruita", "lime.ogg": "llima", "orange.ogg": "taronja", "peach.ogg": "préssecs", "plum.ogg": "prunes", "bay.ogg": "badia", "beach.ogg": "platja", "cave.ogg": "cova", "cliff.ogg": "penya-segat", "cloud.ogg": "núvol", "cold.ogg": "fred", "dirt.ogg": "sòl", "dune.ogg": "duna", "earth.ogg": "la Terra", "fire.ogg": "foc", "flame.ogg": "flama", "garden.ogg": "jardí", "gem.ogg": "joia", "ground.ogg": "el terra", "heat.ogg": "calor", "hole.ogg": "forat", "lake.ogg": "llac", "land.ogg": "terreny", "ledge.ogg": "sortint", "mud.ogg": "fang", "night.ogg": "nit", "ocean.ogg": "oceà", "path.ogg": "camí", "rock.ogg": "roques", "sand.ogg": "sorra", "shore.ogg": "riba", "sky.ogg": "cel", "slope.ogg": "pendent", "smoke.ogg": "fum", "snow.ogg": "neu", "star.ogg": "estel", "stone.ogg": "pedres", "stream.ogg": "riu", "summer.ogg": "estiu", "sun.ogg": "sol", "time.ogg": "temps", "top.ogg": "al cim", "trail.ogg": "sender", "water.ogg": "aigua", "wind.ogg": "vent", "yarn.ogg": "fil", "angel.ogg": "àngel", "bit.ogg": "mica", "class.ogg": "classe", "price.ogg": "preu", "question.ogg": "pregunta", "quiz.ogg": "examen", "science.ogg": "ciència", "splatter.ogg": "esquitxada", "tune.ogg": "melodia", "branch.ogg": "branca", "bud.ogg": "brot", "bush.ogg": "arbust", "flower.ogg": "flor", "grass.ogg": "herba", "hay.ogg": "farratge", "hedge.ogg": "tanca", "lawn.ogg": "gespa", "pine.ogg": "pi", "plant.ogg": "plantes", "rose.ogg": "rosa", "seed.ogg": "llavors", "shrub.ogg": "arbust", "stem.ogg": "tija", "stick.ogg": "branca", "stump.ogg": "tronc", "tree.ogg": "arbre", "carrot.ogg": "pastanaga", "corn.ogg": "blat de moro", "cucumber.ogg": "cogombre", "mushroom.ogg": "bolet", "nut.ogg": "cacauet", "squash.ogg": "carbassó", "bank.ogg": "banc", "barn.ogg": "graner", "bridge.ogg": "pont", "cabin.ogg": "cabana", "cage.ogg": "gàbia", "castle.ogg": "castell", "door.ogg": "porta", "fair.ogg": "atracció", "fountain.ogg": "font", "grave.ogg": "tomba", "home.ogg": "casa", "hut.ogg": "cabana", "lane.ogg": "carrils", "pool.ogg": "piscina", "ramp.ogg": "rampa", "roof.ogg": "sostre", "school.ogg": "col·legi", "shed.ogg": "cobert", "shop.ogg": "botiga", "stage.ogg": "escenari", "store.ogg": "botiga", "street.ogg": "carrer", "strawberry.ogg": "maduixa", "bath.ogg": "banyera", "bed.ogg": "llit", "bench.ogg": "banc", "chair.ogg": "cadira", "chest.ogg": "bagul", "couch.ogg": "sofà", "crib.ogg": "bressols", "desk.ogg": "escriptori", "fan.ogg": "ventilador", "lamp.ogg": "el llum", "light.ogg": "la llum", "mat.ogg": "estora", "quilt.ogg": "edredó", "rug.ogg": "catifa", "seat.ogg": "seient", "shelf.ogg": "prestatge", "shower.ogg": "dutxa", "sink.ogg": "pica", "stove.ogg": "cuina", "toilet.ogg": "vàter", "balance.ogg": "balança", "can.ogg": "llaunes", "clock.ogg": "despertador", "dish.ogg": "font", "fork.ogg": "forquilla", "glass.ogg": "got", "knife.ogg": "ganivet", "lid.ogg": "tapa", "mop.ogg": "fregona", "mug.ogg": "tassa", "pan.ogg": "paella", "plate.ogg": "plat", "pot.ogg": "olla", "scale.ogg": "balança", "sponge.ogg": "esponja", "spoon.ogg": "cullera", "trash.ogg": "escombraries", "tray.ogg": "safata", "farm.ogg": "granja", "anchor.ogg": "àncora", "badge.ogg": "insígnia", "bag.ogg": "bossa", "ball.ogg": "bola", "bead.ogg": "bombolla", "block.ogg": "bloc", "board.ogg": "tauló", "bomb.ogg": "bomba", "book.ogg": "llibre", "box.ogg": "caixa", "candle.ogg": "espelma", "cane.ogg": "bastó", "card.ogg": "tarjeta", "cart.ogg": "carro", "cash.ogg": "diners", "chalk.ogg": "guix", "clay.ogg": "argila", "cloth.ogg": "drap", "coin.ogg": "monedes", "comb.ogg": "pinta", "cone.ogg": "con", "crown.ogg": "corona", "cube.ogg": "cub", "drum.ogg": "tambor", "flag.ogg": "bandera", "flute.ogg": "flauta", "game.ogg": "joc", "gift.ogg": "regal", "glue.ogg": "cola", "hook.ogg": "ham", "hose.ogg": "mànega", "ink.ogg": "tinta", "jewel.ogg": "joia", "kite.ogg": "estel", "knot.ogg": "nus", "log.ogg": "troncs", "map.ogg": "mapa", "mask.ogg": "màscara", "match.ogg": "llumins", "nest.ogg": "niu", "net.ogg": "xarxa", "oar.ogg": "rems", "page.ogg": "pàgina", "pair.ogg": "parell", "pen.ogg": "bolígraf", "pencil.ogg": "llapis", "picture.ogg": "pintura", "pole.ogg": "pal", "prize.ogg": "trofeu", "rag.ogg": "drap", "rope.ogg": "corda", "sign.ogg": "el senyal", "sleigh.ogg": "trineu", "slide.ogg": "tobogan", "squirt.ogg": "pulveritzador", "stack.ogg": "apilar", "stamp.ogg": "segell", "straw.ogg": "palles", "string.ogg": "cordill", "tag.ogg": "etiqueta", "thread.ogg": "bobina", "torch.ogg": "torxa", "towel.ogg": "tovallola", "toy.ogg": "joguina", "trap.ogg": "parany", "tube.ogg": "llapis de llavis", "watch.ogg": "rellotge", "wheel.ogg": "roda", "wig.ogg": "perruca", "wood.ogg": "fusta", "link.ogg": "enllaç", "dirty.ogg": "brut", "throw.ogg": "llançar", "brick.ogg": "maons", "brush.ogg": "brotxa", "flash.ogg": "llanterna", "rake.ogg": "rasclet", "screw.ogg": "vis", "spear.ogg": "la llança", "tool.ogg": "eines", "wedge.ogg": "falca", "wrench.ogg": "clau anglesa", "bike.ogg": "bicicleta", "boat.ogg": "barca", "canoe.ogg": "canoa", "car.ogg": "cotxe", "plane.ogg": "avió", "sail.ogg": "veler", "ship.ogg": "vaixell", "sled.ogg": "trineu", "train.ogg": "tren", "truck.ogg": "camió", "black.ogg": "negre", "blue.ogg": "blau", "brown.ogg": "marró", "color.ogg": "colors", "gray.ogg": "gris", "green.ogg": "verd", "orange-color.ogg": "taronja", "pink.ogg": "rosa", "red.ogg": "vermell", "white.ogg": "blanc", "five.ogg": "cinc", "one.ogg": "un", "ten.ogg": "deu", "three.ogg": "tres", "two.ogg": "dos", "van.ogg": "furgoneta", "big.ogg": "gran", "blind.ogg": "cec", "blond.ogg": "rossa", "bright.ogg": "brillant", "crazy.ogg": "ximple", "cute.ogg": "bufona", "dot.ogg": "punt", "empty.ogg": "buida", "fat.ogg": "gras", "flat.ogg": "pisos", "front.ogg": "davant", "full.ogg": "ple", "giant.ogg": "gegant", "happy.ogg": "feliç", "high.ogg": "a gran altura", "hot.ogg": "calent", "huge.ogg": "enorme", "left.ogg": "esquerra", "line.ogg": "codi de barres", "liquid.ogg": "líquid", "magic.ogg": "mag", "on.ogg": "sobre", "pretty.ogg": "bella", "right.ogg": "dreta", "round.ogg": "circular", "royal.ogg": "reial", "shut.ogg": "tancat", "sick.ogg": "malalt", "small.ogg": "petit", "spot.ogg": "taca", "square.ogg": "quadrat", "stand.ogg": "dret", "straight.ogg": "recte", "stripe.ogg": "ratlles", "strong.ogg": "fortalesa", "tall.ogg": "alt", "thick.ogg": "gruixut", "tired.ogg": "cansat", "under.ogg": "sota", "wet.ogg": "mullat", "wheat.ogg": "blat", "U0030.ogg": "zero", "U0031.ogg": "un", "U0032.ogg": "dos", "U0033.ogg": "tres", "U0034.ogg": "quatre", "U0035.ogg": "cinc", "U0036.ogg": "sis", "U0037.ogg": "set", "U0038.ogg": "vuit", "U0039.ogg": "nou", - "10.ogg": "deu" + "10.ogg": "deu", + "11.ogg": "onze", + "12.ogg": "dotze", + "16.ogg": "setze" } diff --git a/src/activities/lang/resource/content-gd.json b/src/activities/lang/resource/content-gd.json index e88954f44..b97b7f7bd 100644 --- a/src/activities/lang/resource/content-gd.json +++ b/src/activities/lang/resource/content-gd.json @@ -1,576 +1,590 @@ { "bee.ogg": "seillean beag", "alligator.ogg": "ailigeutair mòr", "anchor.ogg": "acair mhòr", "angel.ogg": "aingeal bheag", "animal.ogg": "beathaichean fiadhaich", "ate.ogg": "dh'ith i a leòr", "athlete.ogg": "ruithear math", "back.ogg": "druim goirt", "badge.ogg": "bonn-cuimhne mòr", "badge.ogg": "saighdear mòr", "bag.ogg": "baga mòr", "bait.ogg": "baoit bheò", "bake.ogg": "fuineadh", "balance.ogg": "meidh bheag", "ball.ogg": "bàla mòr", "ballet.ogg": "dannsair math", "bank.ogg": "banca mòr", "banker.ogg": "bancair mòr", "bark.ogg": "a' tabhann", "barn.ogg": "sabhal mòr", "bat.ogg": "ialtag bheag", "bath.ogg": "amar teth", "bay.ogg": "bàgh beag", "beach.ogg": "tràigh mhòr", "bead.ogg": "builgean mòr", "bed.ogg": "leabaidh bheag", "beetle.ogg": "daolag mhòr", "beg.ogg": "a' guidhe", "bench.ogg": "being bheag", "bib.ogg": "uchdan gorm", "big.ogg": "mòr", "bike.ogg": "baidhsagal beag", "bird.ogg": "eun donn", "bit.ogg": "balgam beag", "bite.ogg": "a' toirt greim às", "black.ogg": "dath dubh", "blind.ogg": "fear dall", "blink.ogg": "priobadh na sùla", "block.ogg": "bloca gorm", "blond.ogg": "falt bàn", "blue.ogg": "dath gorm", "board.ogg": "bòrd beag", "boat.ogg": "ràmhach beag", "boil.ogg": "a' goil", "bomb.ogg": "boma mòr", "bone.ogg": "cnàimh mòr", "book.ogg": "leabhar mòr", "box.ogg": "bogsa beag", "boy.ogg": "fireannach beag", "braid.ogg": "dual fada", "brain.ogg": "eanchainn mhòr", "branch.ogg": "geug bheag", "bread.ogg": "aran math", "break.ogg": "cridhe briste", "brick.ogg": "breigean mòra", "bride.ogg": "bean bainnse", "bridge.ogg": "drochaid bheag", "bright.ogg": "rionnag shoilleir", "brother.ogg": "bràthair beag", "brown.ogg": "dath donn", "brush.ogg": "bruis mhòr", "bud.ogg": "gucag bheag", "bug.ogg": "biastag bheag", "bump.ogg": "cnap mòr", "bun.ogg": "rola beag", "bush.ogg": "preas mòr", "cabin.ogg": "bothan beag", "cage.ogg": "cèidse mhòr", "cake.ogg": "cèic mhòr", "call.ogg": "a' cur fòn", "camel.ogg": "càmhal mòr", "camp.ogg": "a' campadh", "can.ogg": "canaichean beaga", "candle.ogg": "coinneal bheag", "candy.ogg": "siùcar beag ", "cane.ogg": "bata mòr", "canoe.ogg": "curach bheag", "cap.ogg": "bonaid bheag", "cape.ogg": "guailleachan beag", "car.ogg": "càr beag", "card.ogg": "cairt mhòr", "carrot.ogg": "curran mòr", "cart.ogg": "troilidh", "cash.ogg": "airgead mòr", "castle.ogg": "caisteal mòr", "cat.ogg": "cat beag", "catch.ogg": "ag iasgach", "cave.ogg": "uamh mhòr", "centipede.ogg": "ceud-chasach fada", "chair.ogg": "sèithear beag", "chalk.ogg": "cailc gheal", "chat.ogg": "a' cabadaich", "cheer.ogg": "a' toirt misneachd", "cheese.ogg": "càise mhath", "cherry.ogg": "siris mhath", "chest.ogg": "ciste mhòr", "chick.ogg": "isean beag", "chicken.ogg": "cearc bheag", "chief.ogg": "ceannard mòr", "child.ogg": "duine-cloinne beag", "chimp.ogg": "muncaidh beag", "chin.ogg": "smiogaid mòr", "chocolate.ogg": "seòclaid mhath", "chop.ogg": "a' gearradh", "clam.ogg": "creachann mòr", "clap.ogg": "a' bualadh basan", "class.ogg": "clas math", "claw.ogg": "cròg mòr", "clay.ogg": "criadh dhonn", "clean.ogg": "a' nighe d' fhalt", "cliff.ogg": "bearradh mòr", "climb.ogg": "a' streap", "clock.ogg": "cleoc mòr", "cloth.ogg": "aodach buidhe", "cloud.ogg": "neul beag", "clown.ogg": "amadan mòr", "coach.ogg": "còidse mhath", "coat.ogg": "còta mòr", "coin.ogg": "bonn beag", "cold.ogg": "fuar", "color.ogg": "dathan", "comb.ogg": "cìr mhòr", "cone.ogg": "còn mòr", "cook.ogg": "còcaire math", "cookie.ogg": "briosgaid mhòr", "corn.ogg": "dias mhòr", "couch.ogg": "langasaid mhòr", "cow.ogg": "bò bheag", "cowboy.ogg": "gille-cruidh beag", "crab.ogg": "crùbag mhòr", "crawl.ogg": "falbh air mhàgaran", "crazy.ogg": "duine craicte", "crib.ogg": "cot mhòr", "croak.ogg": "a' gnàgail", "crocodile.ogg": "crogall mòr", "crow.ogg": "feannag bheag", "crown.ogg": "crùn mòr", "crumb.ogg": "criomag bheag", "crust.ogg": "cùlan donn", "cry.ogg": "a' gal", "cube.ogg": "ciùb beag", "cucumber.ogg": "cularan beag", "cut.ogg": "siosar beag", "cute.ogg": "snog", "cyclist.ogg": "rothaiche mòr", "dad.ogg": "dadaidh mòr", "dance.ogg": "a' dannsadh", "danger.ogg": "cunnart mòr", "den.ogg": "saobhaidh mòr", "desk.ogg": "deasg beag", "dig.ogg": "a' cladhach", "dirt.ogg": "ùir dhorch", "dirty.ogg": "balach salach", "dish.ogg": "soitheach beag", "dive.ogg": "a' daoibhigeadh", "dog.ogg": "cù beag", "door.ogg": "doras mòr", "dot.ogg": "dotag bheag", "dragon.ogg": "dràgon mòr", "drank.ogg": "ag òl", "draw.ogg": "a' dèanamh dealbh", "dream.ogg": "aisling mhath", "dress.ogg": "dreasa bheag", "drink.ogg": "deoch bhlàth", "drive.ogg": "a' draibheadh", "drool.ogg": "a' sileadh sglongaid", "drum.ogg": "druma mhòr", "dry.ogg": "aodach tioram", "duck.ogg": "tunnag bheag", "dune.ogg": "dùn-gainmhich mòr", "ear.ogg": "cluas bheag", "earth.ogg": "an talamh", "eat.ogg": "ag ithe", "empty.ogg": "cana falamh", "explore.ogg": "a' rannsachadh", "face.ogg": "aodann cruinn", "fair.ogg": "faidhir bheag", "fan.ogg": "gaotharan beag", "farm.ogg": "tuathanas beag", "fat.ogg": "gille reamhar", "feast.ogg": "biadh math", "feet.ogg": "cas bheag", "fell.ogg": "thuit e", "fetch.ogg": "faigh am pàipear", "fin.ogg": "ite mhòr", "find.ogg": "a' lorg", "fire.ogg": "teine mòr", "fish.ogg": "iasg beag", "fisher.ogg": "iasgair math", "fist.ogg": "dòrn mòr", "five.ogg": "a còig", "flag.ogg": "bratach bheag", "flame.ogg": "lasair mhòr", "flash.ogg": "leus mòr", "flat.ogg": "flataichean beaga", "flies.ogg": "cuileag bheag", "float.ogg": "air fleòd", "flour.ogg": "flùr geal", "flower.ogg": "flùr beag", "flute.ogg": "fìdeag bheag", "fly.ogg": "ag itealaich", "food.ogg": "biadh luath", "foot.ogg": "cas mhòr", "fork.ogg": "forca bheag", "fountain.ogg": "fuaran beag", "fox.ogg": "madadh-ruadh beag", "freeze.ogg": "reòthadh mòr", "friend.ogg": "caraid math", "frog.ogg": "losgann beag", "front.ogg": "air a bheulaibh", "frown.ogg": "tha drèin oirre", "fruit.ogg": "measan milis", "fudge.ogg": "tofaidh math", "full.ogg": "gloine làn", "fun.ogg": "tha plòigh a' dol", "fur.ogg": "bian blàth", "game.ogg": "geama beag", "garden.ogg": "gàrradh beag", "gem.ogg": "seud mòr", "giant.ogg": "famhair mòr", "gift.ogg": "prèasant beag", "giraffe.ogg": "sioraf mòr", "girl.ogg": "caileag bheag", "glass.ogg": "gloine mhòr", "glove.ogg": "miotagan blàtha", "glue.ogg": "glaodh math", "gnome.ogg": "luchraban beag", "goat.ogg": "gobhar bàn", "grass.ogg": "feur fada", "grave.ogg": "uaigh bheag", "gray.ogg": "dath liath", "green.ogg": "dath uaine", "grin.ogg": "fiamh-ghàire mòr", "ground.ogg": "geadag bheag", "growl.ogg": "a' toirt gnòdhan", "gum.ogg": "bìth milis", "hair.ogg": "falt ruadh", "hand.ogg": "làmh mhòr", "happy.ogg": "toilichte", "hat.ogg": "ad mhòr", "hatch.ogg": "isean 'ga ghur", "hay.ogg": "feur tioram", "head.ogg": "ceann beag", "hear.ogg": "a' cluinntinn", "heat.ogg": "blàth", "hedge.ogg": "callaid bheag", "hen.ogg": "cearc mhòr", "herd.ogg": "treud de chaoraich", "high.ogg": "àrd", "hike.ogg": "a' coiseachd", "hip.ogg": "cruachann mhòr", "hit.ogg": "a' bualadh a chèile", "hole.ogg": "toll beag", "home.ogg": "dachaigh bheag", "hook.ogg": "dubhan mòr", "hop.ogg": "a' bocadaich", "hose.ogg": "pìob-uisge mhòr", "hot.ogg": "teth", "hound.ogg": "cù-seilg beag", "howl.ogg": "ag ulfhairt", "hug.ogg": "a' glacadh a chèile gu teann", "huge.ogg": "anabarrach mòr", "hunter.ogg": "sealgair mòr", "hut.ogg": "bothan mòr", "ice.ogg": "deigh fhuar", "ink.ogg": "inc phurpaidh", "jewel.ogg": "seud beag", "jog.ogg": "a' jogadh", "judge.ogg": "britheamh mòr", "juice.ogg": "sùgh fuar", "jump.ogg": "a' leumadh", "kite.ogg": "itealag bheag", "knee.ogg": "glùn bheag", "kneel.ogg": "tha e a' cromadh air a ghlùinean", "knife.ogg": "sgian bheag", "knight.ogg": "ridir mòr", "knit.ogg": "a' fighe", "knot.ogg": "snaidhm mòr", "lad.ogg": "balach beag", "lake.ogg": "loch beag", "lamb.ogg": "uan beag", "lamp.ogg": "lampa mòr", "land.ogg": "talamh fliuch", "lane.ogg": "rathad beag", "lap.ogg": "ann an uchd na seanmhar", "lawn.ogg": "faiche bheag", "ledge.ogg": "stalla beag", "left.ogg": "clì", "lick.ogg": "ag imlich", "lid.ogg": "failcean mòr", "lift.ogg": "a' togail", "light.ogg": "solas math", "lime.ogg": "liomaideag shearbh", "line.ogg": "loidhne ghorm", "link.ogg": "dul beag", "lip.ogg": "bilean pinc", "liquid.ogg": "boinne beag", "log.ogg": "connadh tioram", "look.ogg": "a' coimhead", "lunch.ogg": "lòn math", "mad.ogg": "air a' chaothach", "magic.ogg": "draoidheachd mhath", "mane.ogg": "muing mhòr", "map.ogg": "mapa beag", "mask.ogg": "aodannan beag", "mat.ogg": "plàta beag", "match.ogg": "lasadan beag", "mate.ogg": "companach math", "meet.ogg": "a' coinneachadh ri chèile", "men.ogg": "daoine", "mice.ogg": "dà luchag bheag", "mole.ogg": "famh dhubh", "mop.ogg": "mapaid mhòr", "mosquito.ogg": "meanbh-chuileag mhòr", "mouth.ogg": "beul mòr", "mud.ogg": "poll salach", "mug.ogg": "muga mòr", "mule.ogg": "leth-asal beag", "mushroom.ogg": "agairg nan cuileagan", "nap.ogg": "norrag bheag", "neck.ogg": "amhaich thana", "nest.ogg": "nead beag", "net.ogg": "lìon beag", "night.ogg": "oidhche dhorch", "nose.ogg": "sròn mhòr", "nut.ogg": "cnò mhòr", "oar.ogg": "dà ràmh mòr", "ocean.ogg": "cuan mòr", "on.ogg": "air", "one.ogg": "a h-aon", "orange.ogg": "dath orains", "orange-color.ogg": "orainsear mòr", "owl.ogg": "cailleach-oidhche bheag", "ox.ogg": "tarbh mòr", "page.ogg": "duilleag bheag", "pair.ogg": "paidhir bhrògan", "pal.ogg": "clann bheaga", "pan.ogg": "aghann bheag", "patch.ogg": "tuthag bheag", "path.ogg": "slighe bheag", "paw.ogg": "spòg mhòr", "peach.ogg": "peitseag mhòr", "peck.ogg": "a' sgobadh", "pen.ogg": "peann beag", "pencil.ogg": "peansail mòr", "pet.ogg": "peata beag", "picture.ogg": "dealbh beag", "pig.ogg": "muc bheag", "pine.ogg": "giuthas mòr", "pink.ogg": "dath pinc", "plane.ogg": "plèana beag", "plant.ogg": "lus beag", "plate.ogg": "truinnsear mòr", "play.ogg": "a' cluich", "plow.ogg": "a' treabhadh", "plum.ogg": "plumas milis", "pole.ogg": "pòla beag", "pool.ogg": "amar-snàimh beag", "pop.ogg": "popcorn", "pope.ogg": "am pàpa", "pot.ogg": "poit bheag", "pounce.ogg": "a' teumadh", "pretty.ogg": "bòidheach", "price.ogg": "prìs mhòr", "prince.ogg": "prionnsa beag", "princess.ogg": "bana-phrionnsa bheag", "prize.ogg": "duais mhòr", "pug.ogg": "cù-smutach", "puppy.ogg": "cuilean beag", "quarrel.ogg": "ag argamaid", "queen.ogg": "bànrigh mhòr", "question.ogg": "ceist mhòr", "quilt.ogg": "cuibhrig mhòr", "quiz.ogg": "co-fharpais cheist", "rag.ogg": "luideag bheag", "rage.ogg": "tha fearg air", "rake.ogg": "ràcan mòr", "ramp.ogg": "rampa beag", "ran.ogg": "a' ruith", "rat.ogg": "radan mòr", "read.ogg": "a' leughadh", "red.ogg": "dath dearg", "rice.ogg": "rìs geal", "ride.ogg": "a' falbh air baidhsagal", "right.ogg": "deas", "rip.ogg": "a' sracadh", "rock.ogg": "clach bheag", "roof.ogg": "mullach mòr", "rope.ogg": "ròpa fada", "rose.ogg": "ròs mòr", "round.ogg": "cruinn", "royal.ogg": "rìgh mòr", "rug.ogg": "ruga beag", "run.ogg": "a' rèiseadh", "sad.ogg": "brònach", "sail.ogg": "seòl beag", "sand.ogg": "gainmheach bog", "sandwich.ogg": "ceapaire mòr", "sat.ogg": "casruisgte", "sauce.ogg": "sabhs dearg", "scale.ogg": "sgèile beag", "scar.ogg": "eàrra mhòr", "scared.ogg": "tha an t-eagal air", "scarf.ogg": "sgarfa mhòr", "school.ogg": "sgoil mhòr", "science.ogg": "saidheans mòr", "scratch.ogg": "a' sgrìobadh", "scream.ogg": "a' leigeil èigh", "screw.ogg": "sgriubha mhòr", "scribble.ogg": "a' sgrochladh", "seat.ogg": "suidheachan mòr", "see.ogg": "a' faicinn", "seed.ogg": "sìol beag", "shake.ogg": "a' crathadh", "shark.ogg": "cearban mòr", "shed.ogg": "seada beag", "shelf.ogg": "sgeilp bheag", "shell.ogg": "slige mhòr", "ship.ogg": "bàta beag", "shirt.ogg": "lèine bheag", "shoe.ogg": "bròg mhòr", "shop.ogg": "bùth beag nan dèideagan", "shore.ogg": "tràigh bheag", "short.ogg": "goirid", "shower.ogg": "frasair mòr", "shrimp.ogg": "muasgan-caol", "shrub.ogg": "tuba bheag", "shut.ogg": "dùinte", "sick.ogg": "tinn", "sign.ogg": "sanas mòr", "sing.ogg": "a' seinn", "sink.ogg": "dòirteal beag", "sip.ogg": "a' gabhail drùthag", "sit.ogg": "na shuidhe", "skate.ogg": "a' falbh air spèileabord ", "ski.ogg": "a' sgìtheadh", "skin.ogg": "craiceann bog", "skirt.ogg": "sgiort bheag", "skunk.ogg": "tùdair beag", "sky.ogg": "turadh beag", "sled.ogg": "càrn beag", "sleep.ogg": "na chadal", "sleeve.ogg": "muilcheann goirid", "sleigh.ogg": "slaodan mòr", "slide.ogg": "sleamhnag bheag", "slime.ogg": "snàmhas", "slope.ogg": "leathad mòr", "small.ogg": "beag", "smell.ogg": "fàileadh math", "smile.ogg": "gàire mhòr", "smock.ogg": "na luideagan", "smoke.ogg": "ceò beag", "smooch.ogg": "a' pògadh", "snack.ogg": "biadh beag", "snail.ogg": "seilcheag bheag", "snake.ogg": "nathair mhòr", "sneaker.ogg": "bròg-spòrs", "sniff.ogg": "a' snòtadh", "snow.ogg": "sneachd mòr", "sock.ogg": "stocainn gheal", "spaghetti.ogg": "spaghetti", "spear.ogg": "sleagh mhòr", "spider.ogg": "damhan-allaidh mòr", "spike.ogg": "gràineag bheag", "spill.ogg": "a' dòrtadh", "splash.ogg": "a' plubadaich", "splatter.ogg": "steall beag", "sponge.ogg": "spong mòr", "spoon.ogg": "spàin mhòr", "sport.ogg": "spòrs", "spot.ogg": "aodach breac", "spray.ogg": "a' stealladh", "spread.ogg": "a' liacradh", "spring.ogg": "sprionga mòr", "sprinkle.ogg": "craiteachan beag", "square.ogg": "ceàrnagach", "squash.ogg": "peapag chrom", "squat.ogg": "a' dèanamh gurraban", "squid.ogg": "gibearnach beag", "squirrel.ogg": "feòrag bheag", "squirt.ogg": "botal-steallaidh", "stack.ogg": "cruach mhòr", "stage.ogg": "àrd-ùrlar beag", "stamp.ogg": "stampa beag", "stand.ogg": "na sheasamh", "star.ogg": "rionnag bheag", "stare.ogg": "a' dùr-choimhead", "starfish.ogg": "crosgag bheag", "stem.ogg": "gas bheag", "stew.ogg": "stiubha math", "stick.ogg": "maide beag", "sting.ogg": "gath beag", "stone.ogg": "dòirneag bheag", "stop.ogg": "stad ort", "store.ogg": "bùth beag", "stove.ogg": "stòbha beag", "straight.ogg": "dìreach", "straw.ogg": "stràbh beag", "strawberry.ogg": "sùbh-làir milis", "stream.ogg": "allt beag", "street.ogg": "sràid mhòr", "stretch.ogg": "a' sìneadh", "string.ogg": "sreang fhada", "stripe.ogg": "stiall ghorm", "strong.ogg": "làidir", "study.ogg": "ag ionnsachadh", "stump.ogg": "stoc mòr", "suit.ogg": "deise ghorm", "summer.ogg": "samhradh math", "sun.ogg": "grian bhlàth", "swan.ogg": "eala bhàn", "sweat.ogg": "a' cur fallas", "swim.ogg": "a' snàmh", "tag.ogg": "taga beag", "tall.ogg": "àrd", "teach.ogg": "a' teagasg", "teacher.ogg": "tidsear math", "tear.ogg": "a' reubadh", "teeth.ogg": "fiaclan geala", "ten.ogg": "a deich", "thick.ogg": "tiugh", "thigh.ogg": "leis thana", "think.ogg": "a' smaoineachadh", "thread.ogg": "snàithlean pinc", "three.ogg": "a trì", "throat.ogg": "sgòrnan goirt", "throw.ogg": "a' tilgeil", "tick.ogg": "feursad beag", "time.ogg": "an t-àm", "tired.ogg": "sgìth", "toilet.ogg": "an taigh-beag", "tool.ogg": "acainnean", "top.ogg": "am mullach", "torch.ogg": "leus gorm", "touch.ogg": "a' beantainn", "towel.ogg": "searbhadair buidhe", "toy.ogg": "dèideag bheag", "trail.ogg": "slighe thana", "train.ogg": "trèan beag", "trap.ogg": "ribe beag", "trash.ogg": "sgudal salach", "tray.ogg": "treidhe bheag", "treat.ogg": "siùcaran", "tree.ogg": "craobh mhòr", "truck.ogg": "làraidh dhearg", "tube.ogg": "beul-dath dearg", "tune.ogg": "fonn math", "two.ogg": "a dhà", "under.ogg": "foidhe", "van.ogg": "bhana beag", "vet.ogg": "dotair math", "wag.ogg": "a' crathadh earball", "walk.ogg": "a' seasamh air leth-chas", "wash.ogg": "a' gabhail amar", "watch.ogg": "uaireadair beag", "water.ogg": "uisge fuar", "wedge.ogg": "gèinn mòr", "wet.ogg": "fliuch", "wheat.ogg": "cruithneachd mhath", "wheel.ogg": "cuibhle chruinn", "whisk.ogg": "sguabag bheag", "whisper.ogg": "a' cagair", "white.ogg": "dath geal", "wig.ogg": "falt fuadain", "win.ogg": "a' buannachadh", "wind.ogg": "gaoth mhòr", "wing.ogg": "sgiath bheag", "wood.ogg": "dèile fhada", "wrench.ogg": "toinnear beag", "wrist.ogg": "caol an dùirn", "write.ogg": "a' sgrìobhadh", "yarn.ogg": "iarna bheag", "yum.ogg": "blasta", - "zoo.ogg": "sutha beag" + "zoo.ogg": "sutha beag", + "U0030.ogg": "neoni", + "U0031.ogg": "aon", + "U0032.ogg": "dhà", + "U0033.ogg": "trì", + "U0034.ogg": "ceithir", + "U0035.ogg": "còig", + "U0036.ogg": "sia", + "U0037.ogg": "seachd", + "U0038.ogg": "ochd", + "U0039.ogg": "naoidh", + "10.ogg": "", + "11.ogg": "", + "12.ogg": "", + "16.ogg": "" } diff --git a/src/activities/lang/resource/content-it.json b/src/activities/lang/resource/content-it.json index 247cea85d..f235ea1cb 100644 --- a/src/activities/lang/resource/content-it.json +++ b/src/activities/lang/resource/content-it.json @@ -1,582 +1,585 @@ { "ate.ogg": "", "bake.ogg": "cucinare", "bark.ogg": "abbaiare", "beg.ogg": "pregare", "bite.ogg": "mordere", "blink.ogg": "", "boil.ogg": "bollire", "break.ogg": "", "call.ogg": "chiamare", "catch.ogg": "pescare", "centipede.ogg": "il centipede", "chat.ogg": "bisbigliare", "chop.ogg": "affettare", "clap.ogg": "", "clean.ogg": "", "crawl.ogg": "gattonare", "croak.ogg": "gracidare", "cry.ogg": "piangere", "cut.ogg": "tagliare", "dig.ogg": "scavare", "drank.ogg": "bere", "draw.ogg": "disegnare", "dream.ogg": "sognare", "drive.ogg": "guida", "drool.ogg": "sbava", "dry.ogg": "", "eat.ogg": "mangiare", "fell.ogg": "", "fetch.ogg": "riportare", "find.ogg": "trovare", "float.ogg": "galleggiare", "fly.ogg": "volare", "freeze.ogg": "congelare", "growl.ogg": "ringhiare", "hatch.ogg": "schiudere", "hear.ogg": "ascoltare", "howl.ogg": "ululare", "hug.ogg": "abbracciare", "jump.ogg": "saltare", "kneel.ogg": "", "knit.ogg": "lavorare ai ferri", "lick.ogg": "leccare", "look.ogg": "guardare", "meet.ogg": "incontrare", "nap.ogg": "pisolare", "peck.ogg": "beccare", "play.ogg": "giocare", "plow.ogg": "dissodare", "pounce.ogg": "", "quarrel.ogg": "litigare", "read.ogg": "leggere", "rip.ogg": "strappato", "run.ogg": "corre", "sat.ogg": "", "scared.ogg": "", "scratch.ogg": "", "scream.ogg": "urlare", "scribble.ogg": "lo scarabocchio", "see.ogg": "vedere", "shake.ogg": "", "sing.ogg": "cantare", "sip.ogg": "succhiare", "sit.ogg": "sedere", "sleep.ogg": "dormire", "smell.ogg": "", "smooch.ogg": "", "sniff.ogg": "annusare", "spill.ogg": "", "splash.ogg": "", "spray.ogg": "spruzzare", "spread.ogg": "spalmare", "spring.ogg": "", "squat.ogg": "", "sting.ogg": "pungere", "stop.ogg": "", "stretch.ogg": "", "study.ogg": "studiare", "teach.ogg": "insegnare", "tear.ogg": "strappare", "think.ogg": "pensare", "touch.ogg": "toccare", "wag.ogg": "", "walk.ogg": "camminare", "wash.ogg": "", "whisper.ogg": "sussurrare", "win.ogg": "", "back.ogg": "la schiena", "braid.ogg": "la treccia", "brain.ogg": "il cervello", "bump.ogg": "il bernoccolo", "chin.ogg": "il mento", "ear.ogg": "l'orecchio", "face.ogg": "la faccia", "feet.ogg": "i piedi", "fist.ogg": "il pugno", "foot.ogg": "il piede", "grin.ogg": "il ghigno", "hair.ogg": "i capelli", "hand.ogg": "la mano", "head.ogg": "la testa", "hip.ogg": "i fianchi", "knee.ogg": "il ginocchio", "lap.ogg": "il grembo", "lip.ogg": "le labbra", "mouth.ogg": "la bocca", "neck.ogg": "il collo", "nose.ogg": "il naso", "scar.ogg": "la cicatrice", "skin.ogg": "la pelle", "stare.ogg": "lo sguardo", "sweat.ogg": "il sudore", "teeth.ogg": "i denti", "thigh.ogg": "la coscia", "throat.ogg": "la gola", "wrist.ogg": "il polso", "bib.ogg": "il bavaglino", "cap.ogg": "il cappellino", "cape.ogg": "il mantello", "coat.ogg": "il cappotto", "dress.ogg": "il vestito", "glove.ogg": "i guanti", "hat.ogg": "il cappello", "patch.ogg": "la toppa", "scarf.ogg": "la sciarpa", "shirt.ogg": "la camicia", "shoe.ogg": "la scarpa", "short.ogg": "i pantaloni corti", "skirt.ogg": "la gonna", "sleeve.ogg": "la manica", "smock.ogg": "", "sneaker.ogg": "la scarpa da tennis", "sock.ogg": "il calzino", "suit.ogg": "l'abito", "zoo.ogg": "lo zoo", "danger.ogg": "", "frown.ogg": "", "fun.ogg": "il divertimento", "mad.ogg": "la follia", "rage.ogg": "la rabbia", "sad.ogg": "la tristezza", "smile.ogg": "il sorriso", "whisk.ogg": "", "chief.ogg": "", "clown.ogg": "il pagliaccio", "coach.ogg": "l'allenatrice", "cowboy.ogg": "il cowboy", "hunter.ogg": "il cacciatore", "judge.ogg": "il giudice", "knight.ogg": "il cavaliere", "lad.ogg": "", "pope.ogg": "il papa", "prince.ogg": "il principe", "princess.ogg": "la principessa", "queen.ogg": "la regina", "teacher.ogg": "la maestra", "vet.ogg": "il veterinario", "boy.ogg": "il ragazzo", "bride.ogg": "la sposa", "brother.ogg": "il fratello", "child.ogg": "il bambino", "dad.ogg": "il papà", "friend.ogg": "gli amici", "girl.ogg": "la ragazza", "gnome.ogg": "lo gnomo", "mate.ogg": "", "men.ogg": "gli uomini", "pal.ogg": "", "athlete.ogg": "l'atleta", "ballet.ogg": "il balletto", "camp.ogg": "", "cheer.ogg": "", "climb.ogg": "", "dance.ogg": "", "dive.ogg": "", "explore.ogg": "", "hike.ogg": "", "hit.ogg": "", "hop.ogg": "", "jog.ogg": "correre", "lift.ogg": "sollevare i pesi", "ran.ogg": "", "ride.ogg": "andare in bicicletta", "skate.ogg": "pattinare", "ski.ogg": "sciare", "sport.ogg": "sport", "swim.ogg": "nuotare", "write.ogg": "", "alligator.ogg": "l'alligatore", "animal.ogg": "gli animali", "bait.ogg": "", "bat.ogg": "il pipistrello", "bee.ogg": "l'ape", "beetle.ogg": "lo scarabeo", "bird.ogg": "l'uccello", "bug.ogg": "l'insetto", "camel.ogg": "il cammello", "cat.ogg": "il gatto", "chick.ogg": "il pulcino", "chicken.ogg": "la gallina", "chimp.ogg": "la scimmia", "clam.ogg": "la conchiglia", "claw.ogg": "gli artigli", "cow.ogg": "la mucca", "crab.ogg": "il granchio", "crocodile.ogg": "il coccodrillo", "crow.ogg": "il corvo", "den.ogg": "la tana", "dog.ogg": "il cane", "dragon.ogg": "il drago", "duck.ogg": "l'anatra", "fin.ogg": "la pinna", "fish.ogg": "il pesce", "flies.ogg": "la mosca", "fox.ogg": "la volpe", "frog.ogg": "la rana", "fur.ogg": "la pelliccia", "giraffe.ogg": "la giraffa", "goat.ogg": "la capra", "hen.ogg": "la gallina", "herd.ogg": "il gregge", "hound.ogg": "il segugio", "lamb.ogg": "l'agnello", "mane.ogg": "la criniera", "mice.ogg": "i topi", "mole.ogg": "la talpa", "mosquito.ogg": "la zanzara", "mule.ogg": "il mulo", "owl.ogg": "il gufo", "ox.ogg": "il bue", "paw.ogg": "", "pet.ogg": "", "pig.ogg": "il maiale", "pug.ogg": "", "puppy.ogg": "il cucciolo", "rat.ogg": "il ratto", "shark.ogg": "il pescecane", "shell.ogg": "la conchiglia", "shrimp.ogg": "il gambero", "skunk.ogg": "la puzzola", "slime.ogg": "la bava", "snail.ogg": "la lumaca", "snake.ogg": "il serpente", "spider.ogg": "il ragno", "spike.ogg": "gli aculei", "squid.ogg": "il calamaro", "squirrel.ogg": "lo scoiattolo", "starfish.ogg": "la stella di mare", "swan.ogg": "il cigno", "tick.ogg": "la zecca", "wing.ogg": "l'ala", "yum.ogg": "", "bone.ogg": "l'osso", "bread.ogg": "il pane", "bun.ogg": "il panino", "cake.ogg": "il dolce", "candy.ogg": "la caramella", "cheese.ogg": "il formaggio", "chocolate.ogg": "il cioccolato", "cookie.ogg": "i biscotti", "crumb.ogg": "la briciola", "crust.ogg": "la crosta", "drink.ogg": "il caffè", "feast.ogg": "", "flour.ogg": "la farina", "food.ogg": "", "fudge.ogg": "", "gum.ogg": "la gomma da masticare", "ice.ogg": "il ghiaccio", "juice.ogg": "il succo d'arancia", "lunch.ogg": "la merenda", "pop.ogg": "", "rice.ogg": "il riso", "sandwich.ogg": "il panino", "sauce.ogg": "la salsa", "snack.ogg": "", "spaghetti.ogg": "gli spaghetti", "sprinkle.ogg": "", "stew.ogg": "lo stufato", "treat.ogg": "", "cherry.ogg": "le ciliegie", "fruit.ogg": "la frutta", "lime.ogg": "il lime", "orange.ogg": "l'arancio", "peach.ogg": "la pesca", "plum.ogg": "la prugna", "bay.ogg": "la baia", "beach.ogg": "la spiaggia", "cave.ogg": "la grotta", "cliff.ogg": "il burrone", "cloud.ogg": "la nuvola", "cold.ogg": "", "dirt.ogg": "", "dune.ogg": "la duna", "earth.ogg": "la terra", "fire.ogg": "il fuoco", "flame.ogg": "la fiamma", "garden.ogg": "il giardino", "gem.ogg": "", "ground.ogg": "la terra", "heat.ogg": "il caldo", "hole.ogg": "il buco", "lake.ogg": "il lago", "land.ogg": "la terra", "ledge.ogg": "", "mud.ogg": "il fango", "night.ogg": "la notte", "ocean.ogg": "l'oceano", "path.ogg": "il sentiero", "rock.ogg": "la roccia", "sand.ogg": "la sabbia", "shore.ogg": "il bagnasciuga", "sky.ogg": "il cielo", "slope.ogg": "", "smoke.ogg": "il fumo", "snow.ogg": "la neve", "star.ogg": "la stella", "stone.ogg": "la pietra", "stream.ogg": "il vapore", "summer.ogg": "l'estate", "sun.ogg": "il sole", "time.ogg": "il tempo", "top.ogg": "la cima", "trail.ogg": "", "water.ogg": "l'acqua", "wind.ogg": "il vento", "yarn.ogg": "", "angel.ogg": "", "bit.ogg": "il bocconcino", "class.ogg": "i compiti", "price.ogg": "il prezzo", "question.ogg": "la domanda", "quiz.ogg": "quiz", "science.ogg": "la scienza", "splatter.ogg": "", "tune.ogg": "le note", "branch.ogg": "il ramo", "bud.ogg": "la gemma", "bush.ogg": "il cespuglio", "flower.ogg": "il fiore", "grass.ogg": "l'erba", "hay.ogg": "la paglia", "hedge.ogg": "la siepe", "lawn.ogg": "il prato", "pine.ogg": "il pino", "plant.ogg": "la pianta", "rose.ogg": "la rosa", "seed.ogg": "il seme", "shrub.ogg": "", "stem.ogg": "lo stelo", "stick.ogg": "", "stump.ogg": "il ceppo", "tree.ogg": "l'albero", "carrot.ogg": "la carota", "corn.ogg": "la pannocchia", "cucumber.ogg": "il cetriolo", "mushroom.ogg": "il fungo", "nut.ogg": "l'arachide", "squash.ogg": "la zucca", "bank.ogg": "la banca", "barn.ogg": "il fienile", "bridge.ogg": "il ponte", "cabin.ogg": "", "cage.ogg": "la gabbia", "castle.ogg": "il castello", "door.ogg": "la porta", "fair.ogg": "", "fountain.ogg": "la fontana", "grave.ogg": "la tomba", "home.ogg": "la casa", "hut.ogg": "la capanna", "lane.ogg": "la strada", "pool.ogg": "la piscina", "ramp.ogg": "la rampa", "roof.ogg": "il tetto", "school.ogg": "la scuola", "shed.ogg": "", "shop.ogg": "il negozio", "stage.ogg": "il palco", "store.ogg": "il negozio", "street.ogg": "la via", "strawberry.ogg": "la fragola", "bath.ogg": "la vasca da bagno", "bed.ogg": "il letto", "bench.ogg": "la panchina", "chair.ogg": "la sedia", "chest.ogg": "il forziere", "couch.ogg": "il divano", "crib.ogg": "la culla", "desk.ogg": "la scrivania", "fan.ogg": "il ventilatore", "lamp.ogg": "la lampada", "light.ogg": "la luce", "mat.ogg": "il tappetino", "quilt.ogg": "la trapunta", "rug.ogg": "il tappeto", "seat.ogg": "la sedia a dondolo", "shelf.ogg": "lo scaffale", "shower.ogg": "la doccia", "sink.ogg": "il lavandino", "stove.ogg": "la cucina", "toilet.ogg": "il gabinetto", "balance.ogg": "la bilancia", "can.ogg": "i barattoli", "clock.ogg": "la sveglia", "dish.ogg": "la zuppiera", "fork.ogg": "la forchetta", "glass.ogg": "il bicchiere", "knife.ogg": "il coltello", "lid.ogg": "il coperchio", "mop.ogg": "", "mug.ogg": "la tazza", "pan.ogg": "la padella", "plate.ogg": "il piatto", "pot.ogg": "la pentola", "scale.ogg": "la bilancia", "sponge.ogg": "la spugna", "spoon.ogg": "il cucchiaio", "trash.ogg": "la spazzatura", "tray.ogg": "il vassoio", "farm.ogg": "la fattoria", "anchor.ogg": "l'ancora", "badge.ogg": "la medaglia", "bag.ogg": "lo zaino", "ball.ogg": "la palla", "bead.ogg": "la perlina", "block.ogg": "il cubo", "board.ogg": "il cartello", "bomb.ogg": "la bomba", "book.ogg": "il libro", "box.ogg": "la scatola", "candle.ogg": "la candela", "cane.ogg": "il bastone", "card.ogg": "la cartolina", "cart.ogg": "il carrello", "cash.ogg": "i soldi", "chalk.ogg": "il gesso", "clay.ogg": "l'argilla", "cloth.ogg": "il tessuto", "coin.ogg": "le monete", "comb.ogg": "il pettine", "cone.ogg": "", "crown.ogg": "la corona", "cube.ogg": "il cubo", "drum.ogg": "il tamburo", "flag.ogg": "la bandiera", "flute.ogg": "il flauto", "game.ogg": "il giocattolo", "gift.ogg": "il regalo", "glue.ogg": "la colla", "hook.ogg": "l'amo", "hose.ogg": "", "ink.ogg": "l'inchiostro", "jewel.ogg": "il gioiello", "kite.ogg": "l'aquilone", "knot.ogg": "il nodo", "log.ogg": "i ceppi", "map.ogg": "la mappa", "mask.ogg": "la maschera da sub", "match.ogg": "i fiammiferi", "nest.ogg": "il nido", "net.ogg": "la rete", "oar.ogg": "i remi", "page.ogg": "la pagina", "pair.ogg": "un paio", "pen.ogg": "la penna", "pencil.ogg": "la matita", "picture.ogg": "il quadro", "pole.ogg": "il palo", "prize.ogg": "il premio", "rag.ogg": "lo strofinaccio", "rope.ogg": "la corda", "sign.ogg": "il cartello", "sleigh.ogg": "la slitta", "slide.ogg": "lo scivolo", "squirt.ogg": "", "stack.ogg": "una pila", "stamp.ogg": "il francobollo", "straw.ogg": "la cannuccia", "string.ogg": "lo spago", "tag.ogg": "il cartellino", "thread.ogg": "il filo", "torch.ogg": "la torcia", "towel.ogg": "l'asciugamano", "toy.ogg": "il giocattolo", "trap.ogg": "la trappola", "tube.ogg": "il rossetto", "watch.ogg": "l'orologio da polso", "wheel.ogg": "la ruota", "wig.ogg": "la parrucca", "wood.ogg": "il legno", "link.ogg": "l'anello", "dirty.ogg": "sporco", "throw.ogg": "lanciare", "brick.ogg": "i mattoni", "brush.ogg": "il pennello", "flash.ogg": "la torcia elettrica", "rake.ogg": "il rastrello", "screw.ogg": "la vite", "spear.ogg": "la lancia", "tool.ogg": "gli attrezzi", "wedge.ogg": "il cuneo", "wrench.ogg": "la chiave inglese", "bike.ogg": "la bicicletta", "boat.ogg": "la barca", "canoe.ogg": "la canoa", "car.ogg": "l'automobile", "plane.ogg": "l'aeroplano", "sail.ogg": "la vela", "ship.ogg": "la nave", "sled.ogg": "la slitta", "train.ogg": "il treno", "truck.ogg": "il camion", "black.ogg": "nero", "blue.ogg": "blu", "brown.ogg": "marrone", "color.ogg": "", "gray.ogg": "grigio", "green.ogg": "verde", "orange-color.ogg": "arancione", "pink.ogg": "rosa", "red.ogg": "rosso", "white.ogg": "bianco", "five.ogg": "cinque", "one.ogg": "uno", "ten.ogg": "dieci", "three.ogg": "tre", "two.ogg": "due", "van.ogg": "", "big.ogg": "", "blind.ogg": "", "blond.ogg": "", "bright.ogg": "", "crazy.ogg": "", "cute.ogg": "", "dot.ogg": "", "empty.ogg": "", "fat.ogg": "", "flat.ogg": "", "front.ogg": "", "full.ogg": "", "giant.ogg": "", "happy.ogg": "", "high.ogg": "", "hot.ogg": "", "huge.ogg": "", "left.ogg": "", "line.ogg": "", "liquid.ogg": "", "magic.ogg": "", "on.ogg": "", "pretty.ogg": "", "right.ogg": "", "round.ogg": "", "royal.ogg": "", "shut.ogg": "", "sick.ogg": "", "small.ogg": "", "spot.ogg": "", "square.ogg": "", "stand.ogg": "", "straight.ogg": "", "stripe.ogg": "", "strong.ogg": "", "tall.ogg": "", "thick.ogg": "", "tired.ogg": "", "under.ogg": "", "wet.ogg": "", "wheat.ogg": "", "U0030.ogg": "zero", "U0031.ogg": "uno", "U0032.ogg": "due", "U0033.ogg": "tre", "U0034.ogg": "quattro", "U0035.ogg": "cinque", "U0036.ogg": "sei", "U0037.ogg": "sette", "U0038.ogg": "otto", "U0039.ogg": "nove", - "10.ogg": "dieci" + "10.ogg": "dieci", + "11.ogg": "undici", + "12.ogg": "dodici", + "16.ogg": "sedici" } diff --git a/src/activities/lang/resource/content-pt_BR.json b/src/activities/lang/resource/content-pt_BR.json index 20355d920..a535aeb00 100644 --- a/src/activities/lang/resource/content-pt_BR.json +++ b/src/activities/lang/resource/content-pt_BR.json @@ -1,572 +1,586 @@ { "ate.ogg": "comer", "bake.ogg": "cozinhar", "bark.ogg": "latir", "beg.ogg": "implorar", "bite.ogg": "morder", "blink.ogg": "piscar", "boil.ogg": "ferver", "break.ogg": "partir", "call.ogg": "ligar", "catch.ogg": "pegar", "centipede.ogg": "centopeia", "chat.ogg": "conversar", "chop.ogg": "cortar", "clap.ogg": "palma", "clean.ogg": "limpar", "crawl.ogg": "engatinhar", "croak.ogg": "coaxar", "cry.ogg": "chorar", "cut.ogg": "cortar", "dig.ogg": "escavar", "drank.ogg": "beber", "draw.ogg": "desenhar", "dream.ogg": "sonhar", "drive.ogg": "dirigir", "drool.ogg": "babar", "dry.ogg": "secar", "eat.ogg": "comer", "fell.ogg": "cair", "fetch.ogg": "buscar", "find.ogg": "encontrar", "float.ogg": "boiar", "fly.ogg": "voar", "freeze.ogg": "congelar", "growl.ogg": "rosnar", "hatch.ogg": "chocar", "hear.ogg": "escutar", "howl.ogg": "uivar", "hug.ogg": "abraçar", "jump.ogg": "pular", "kneel.ogg": "ajoelhar", "knit.ogg": "tricotar", "lick.ogg": "lamber", "look.ogg": "olhar", "meet.ogg": "encontrar", "nap.ogg": "cochilar", "peck.ogg": "bicar", "play.ogg": "brincar", "plow.ogg": "arar", "pounce.ogg": "atacar", "quarrel.ogg": "discutir", "read.ogg": "ler", "rip.ogg": "arrancar", "run.ogg": "correr", "sat.ogg": "sentar", "scared.ogg": "assustar", "scratch.ogg": "arranhar", "scream.ogg": "gritar", "scribble.ogg": "rabiscar", "see.ogg": "observar", "shake.ogg": "sacudir", "sing.ogg": "cantar", "sip.ogg": "sorver", "sit.ogg": "sentar", "sleep.ogg": "dormir", "smell.ogg": "cheirar", "smooch.ogg": "beijar", "sniff.ogg": "farejar", "spill.ogg": "derramar", "splash.ogg": "respingar", "spray.ogg": "borrifar", "spread.ogg": "espalhar", "spring.ogg": "pular", "squat.ogg": "agachar", "sting.ogg": "ferroar", "stop.ogg": "parar", "stretch.ogg": "alongar", "study.ogg": "estudar", "teach.ogg": "ensinar", "tear.ogg": "rasgar", "think.ogg": "pensar", "touch.ogg": "tocar", "wag.ogg": "abanar", "walk.ogg": "andar", "wash.ogg": "lavar", "whisper.ogg": "cochichar", "win.ogg": "ganhar", "back.ogg": "costas", "braid.ogg": "trança", "brain.ogg": "cérebro", "bump.ogg": "batida", "chin.ogg": "queixo", "ear.ogg": "orelha", "face.ogg": "face", "feet.ogg": "pés", "fist.ogg": "punho", "foot.ogg": "pé", "grin.ogg": "sorriso", "hair.ogg": "cabelo", "hand.ogg": "mão", "head.ogg": "cabeça", "hip.ogg": "quadril", "knee.ogg": "joelho", "lap.ogg": "colo", "lip.ogg": "lábio", "mouth.ogg": "boca", "neck.ogg": "pescoço", "nose.ogg": "nariz", "scar.ogg": "cicatriz", "skin.ogg": "pele", "stare.ogg": "olhar", "sweat.ogg": "suor", "teeth.ogg": "dentes", "thigh.ogg": "coxa", "throat.ogg": "garganta", "wrist.ogg": "pulso", "bib.ogg": "babador", "cap.ogg": "boné", "cape.ogg": "capa", "coat.ogg": "casaco", "dress.ogg": "vestido", "glove.ogg": "luva", "hat.ogg": "chapéu", "patch.ogg": "remendo", "scarf.ogg": "cachecol", "shirt.ogg": "camisa", "shoe.ogg": "sapato", "short.ogg": "short", "skirt.ogg": "saia", "sleeve.ogg": "manga", "smock.ogg": "jaleco", "sneaker.ogg": "tênis", "sock.ogg": "meia", "suit.ogg": "terno", "zoo.ogg": "zoológico", "danger.ogg": "perigo", "frown.ogg": "franzida", "fun.ogg": "diversão", "mad.ogg": "furioso", "rage.ogg": "raiva", "sad.ogg": "tristeza", "smile.ogg": "sorriso", "whisk.ogg": "batedor", "chief.ogg": "cacique", "clown.ogg": "palhaço", "coach.ogg": "treinador", "cowboy.ogg": "vaqueiro", "hunter.ogg": "caçador", "judge.ogg": "juiz", "knight.ogg": "cavaleiro", "lad.ogg": "rapaz", "pope.ogg": "papa", "prince.ogg": "príncipe", "princess.ogg": "princesa", "queen.ogg": "rainha", "teacher.ogg": "professor", "vet.ogg": "veterinário", "boy.ogg": "menino", "bride.ogg": "noiva", "brother.ogg": "irmão", "child.ogg": "criança", "dad.ogg": "pai", "friend.ogg": "amigo", "girl.ogg": "menina", "gnome.ogg": "gnomo", "mate.ogg": "colega", "men.ogg": "homens", "pal.ogg": "camarada", "athlete.ogg": "atleta", "ballet.ogg": "balé", "camp.ogg": "acampamento", "cheer.ogg": "torcer", "climb.ogg": "escalar", "dance.ogg": "dança", "dive.ogg": "mergulho", "explore.ogg": "explorar", "hike.ogg": "caminhar", "hit.ogg": "golpear", "hop.ogg": "saltar", "jog.ogg": "correr", "lift.ogg": "levantar", "ran.ogg": "chegada", "ride.ogg": "pedalar", "skate.ogg": "patinar", "ski.ogg": "esquiar", "sport.ogg": "esporte", "swim.ogg": "nadar", "write.ogg": "escrever", "alligator.ogg": "jacaré", "animal.ogg": "animais", "bait.ogg": "isca", "bat.ogg": "morcego", "bee.ogg": "abelha", "beetle.ogg": "besouro", "bird.ogg": "pássaro", "bug.ogg": "inseto", "camel.ogg": "camelo", "cat.ogg": "gato", "chick.ogg": "pintinho", "chicken.ogg": "frango", "chimp.ogg": "chimpanzé", "clam.ogg": "molusco", "claw.ogg": "garra", "cow.ogg": "vaca", "crab.ogg": "caranguejo", "crocodile.ogg": "crocodilo", "crow.ogg": "corvo", "den.ogg": "toca", "dog.ogg": "cachorro", "dragon.ogg": "dragão", "duck.ogg": "pato", "fin.ogg": "barbatana", "fish.ogg": "peixe", "flies.ogg": "mosca", "fox.ogg": "raposa", "frog.ogg": "sapo", "fur.ogg": "pêlo", "giraffe.ogg": "girafa", "goat.ogg": "cabra", "hen.ogg": "galinha", "herd.ogg": "rebanho", "hound.ogg": "cão de caça", "lamb.ogg": "cordeiro", "mane.ogg": "juba", "mice.ogg": "ratas", "mole.ogg": "toupeira", "mosquito.ogg": "mosquito", "mule.ogg": "mula", "owl.ogg": "coruja", "ox.ogg": "boi", "paw.ogg": "pegada", "pet.ogg": "animal de estimação", "pig.ogg": "porco", "pug.ogg": "pug", "puppy.ogg": "cachorro", "rat.ogg": "rato", "shark.ogg": "tubarão", "shell.ogg": "concha", "shrimp.ogg": "camarão", "skunk.ogg": "gambá", "slime.ogg": "muco", "snail.ogg": "caracol", "snake.ogg": "cobra", "spider.ogg": "aranha", "spike.ogg": "porco-espinho", "squid.ogg": "lula", "squirrel.ogg": "esquilo", "starfish.ogg": "estrela do mar", "swan.ogg": "cisne", "tick.ogg": "carrapato", "wing.ogg": "asa", "yum.ogg": "delícia", "bone.ogg": "osso", "bread.ogg": "pão", "bun.ogg": "brioche", "cake.ogg": "bolo", "candy.ogg": "doce", "cheese.ogg": "queijo", "chocolate.ogg": "chocolate", "cookie.ogg": "biscoito", "crumb.ogg": "migalha", "crust.ogg": "casca", "drink.ogg": "bebida", "feast.ogg": "banquete", "flour.ogg": "farinha", "food.ogg": "comida", "fudge.ogg": "doce de chocolate", "gum.ogg": "chiclete", "ice.ogg": "gelo", "juice.ogg": "suco", "lunch.ogg": "lanche", "pop.ogg": "pipoca", "rice.ogg": "arroz", "sandwich.ogg": "sanduíche", "sauce.ogg": "molho", "snack.ogg": "aperitivo", "spaghetti.ogg": "espaguete", "sprinkle.ogg": "granulado", "stew.ogg": "ensopado", "treat.ogg": "doces", "cherry.ogg": "cereja", "fruit.ogg": "fruta", "lime.ogg": "limão", "orange.ogg": "laranja", "peach.ogg": "pêssego", "plum.ogg": "ameixa", "bay.ogg": "baía", "beach.ogg": "praia", "cave.ogg": "caverna", "cliff.ogg": "penhasco", "cloud.ogg": "nuvem", "cold.ogg": "frio", "dirt.ogg": "terra", "dune.ogg": "duna", "earth.ogg": "mundo", "fire.ogg": "fogo", "flame.ogg": "flama", "garden.ogg": "jardim", "gem.ogg": "joia", "ground.ogg": "solo", "heat.ogg": "calor", "hole.ogg": "buraco", "lake.ogg": "lago", "land.ogg": "terreno", "ledge.ogg": "borda", "mud.ogg": "lama", "night.ogg": "noite", "ocean.ogg": "oceano", "path.ogg": "caminho", "rock.ogg": "rocha", "sand.ogg": "areia", "shore.ogg": "costa", "sky.ogg": "céu", "slope.ogg": "declive", "smoke.ogg": "fumaça", "snow.ogg": "neve", "star.ogg": "estrela", "stone.ogg": "pedra", "stream.ogg": "córrego", "summer.ogg": "verão", "sun.ogg": "sol", "time.ogg": "hora", "top.ogg": "topo", "trail.ogg": "trilha", "water.ogg": "água", "wind.ogg": "vento", "yarn.ogg": "fio", "angel.ogg": "anjo", "bit.ogg": "mordida", "class.ogg": "aula", "price.ogg": "preço", "question.ogg": "pergunta", "quiz.ogg": "enigma", "science.ogg": "ciência", "splatter.ogg": "mancha", "tune.ogg": "melodia", "branch.ogg": "ramo", "bud.ogg": "broto", "bush.ogg": "arbusto", "flower.ogg": "flor", "grass.ogg": "grama", "hay.ogg": "feno", "hedge.ogg": "cerca viva", "lawn.ogg": "gramado", "pine.ogg": "pinheiro", "plant.ogg": "planta", "rose.ogg": "rosa", "seed.ogg": "semente", "shrub.ogg": "arbusto", "stem.ogg": "caule", "stick.ogg": "galho", "stump.ogg": "tronco", "tree.ogg": "árvore", "carrot.ogg": "cenoura", "corn.ogg": "milho", "cucumber.ogg": "pepino", "mushroom.ogg": "cogumelo", "nut.ogg": "noz", "squash.ogg": "abóbora", "bank.ogg": "banco", "barn.ogg": "celeiro", "bridge.ogg": "ponte", "cabin.ogg": "cabana", "cage.ogg": "gaiola", "castle.ogg": "castelo", "door.ogg": "porta", "fair.ogg": "parque ambulante", "fountain.ogg": "fonte", "grave.ogg": "lápide", "home.ogg": "lar", "hut.ogg": "oca", "lane.ogg": "pista", "pool.ogg": "piscina", "ramp.ogg": "rampa", "roof.ogg": "telhado", "school.ogg": "escola", "shed.ogg": "celeiro", "shop.ogg": "loja", "stage.ogg": "palco", "store.ogg": "mercearia", "street.ogg": "rua", "strawberry.ogg": "morango", "bath.ogg": "banheira", "bed.ogg": "cama", "bench.ogg": "banco", "chair.ogg": "cadeira", "chest.ogg": "baú", "couch.ogg": "sofá", "crib.ogg": "berço", "desk.ogg": "escrivaninha", "fan.ogg": "ventilador", "lamp.ogg": "abajur", "light.ogg": "luz", "mat.ogg": "capacho", "quilt.ogg": "colcha", "rug.ogg": "tapete", "seat.ogg": "assento", "shelf.ogg": "prateleira", "shower.ogg": "chuveiro", "sink.ogg": "pia", "stove.ogg": "fogão", "toilet.ogg": "banheiro", "balance.ogg": "balança", "can.ogg": "lata", "clock.ogg": "relógio", "dish.ogg": "prato", "fork.ogg": "garfo", "glass.ogg": "copo", "knife.ogg": "faca", "lid.ogg": "tampa", "mop.ogg": "esfregão", "mug.ogg": "caneca", "pan.ogg": "frigideira", "plate.ogg": "prato", "pot.ogg": "pote", "scale.ogg": "balança de cozinha", "sponge.ogg": "esponja", "spoon.ogg": "colher", "trash.ogg": "pá de lixo", "tray.ogg": "bandeja", "farm.ogg": "fazenda", "anchor.ogg": "âncora", "badge.ogg": "insígnia", "bag.ogg": "mochila", "ball.ogg": "bola", "bead.ogg": "bolha", "block.ogg": "bloco", "board.ogg": "placa", "bomb.ogg": "bomba", "book.ogg": "livro", "box.ogg": "caixa", "candle.ogg": "vela", "cane.ogg": "bengala", "card.ogg": "cartão", "cart.ogg": "carrinho", "cash.ogg": "dinheiro", "chalk.ogg": "giz", "clay.ogg": "argila", "cloth.ogg": "tecido", "coin.ogg": "moeda", "comb.ogg": "pente", "cone.ogg": "cone", "crown.ogg": "coroa", "cube.ogg": "cubo", "drum.ogg": "tambor", "flag.ogg": "bandeira", "flute.ogg": "flauta", "game.ogg": "jogo", "gift.ogg": "presente", "glue.ogg": "cola", "hook.ogg": "gancho", "hose.ogg": "mangueira", "ink.ogg": "tinta", "jewel.ogg": "jóia", "kite.ogg": "pipa", "knot.ogg": "nó", "log.ogg": "tora", "map.ogg": "mapa", "mask.ogg": "máscara", "match.ogg": "fósforo", "nest.ogg": "ninho", "net.ogg": "rede", "oar.ogg": "remo", "page.ogg": "página", "pair.ogg": "par", "pen.ogg": "caneta", "pencil.ogg": "lápis", "picture.ogg": "foto", "pole.ogg": "pau", "prize.ogg": "prêmio", "rag.ogg": "flanela", "rope.ogg": "corda", "sign.ogg": "placa", "sleigh.ogg": "trenó", "slide.ogg": "escorregador", "squirt.ogg": "borrifador", "stack.ogg": "pilha de pratos", "stamp.ogg": "selo", "straw.ogg": "canudo", "string.ogg": "fio", "tag.ogg": "etiqueta", "thread.ogg": "linha", "torch.ogg": "tocha", "towel.ogg": "toalha", "toy.ogg": "brinquedo", "trap.ogg": "ratoeira", "tube.ogg": "batom", "watch.ogg": "relógio", "wheel.ogg": "roda", "wig.ogg": "peruca", "wood.ogg": "madeira", "link.ogg": "argola", "dirty.ogg": "sujo", "throw.ogg": "arremessar", "brick.ogg": "tijolo", "brush.ogg": "pincel", "flash.ogg": "lanterna", "rake.ogg": "ciscador", "screw.ogg": "parafuso", "spear.ogg": "lança", "tool.ogg": "ferramenta", "wedge.ogg": "cunha", "wrench.ogg": "chave inglesa", "bike.ogg": "bicicleta", "boat.ogg": "barco", "canoe.ogg": "canoa", "car.ogg": "carro", "plane.ogg": "avião", "sail.ogg": "veleiro", "ship.ogg": "barco", "sled.ogg": "trenó", "train.ogg": "trem", "truck.ogg": "caminhão", "black.ogg": "preta", "blue.ogg": "azul", "brown.ogg": "marrom", "color.ogg": "cor", "gray.ogg": "cinza", "green.ogg": "verde", "orange-color.ogg": "laranja", "pink.ogg": "rosa", "red.ogg": "vermelha", "white.ogg": "branca", "five.ogg": "cinco", "one.ogg": "um", "ten.ogg": "dez", "three.ogg": "três", "two.ogg": "dois", "van.ogg": "van", "big.ogg": "grande", "blind.ogg": "cego", "blond.ogg": "loira", "bright.ogg": "brilhante", "crazy.ogg": "doido", "cute.ogg": "fofa", "dark.ogg": "negra", "dot.ogg": "ponto", "empty.ogg": "vazia", "fat.ogg": "gordo", "flat.ogg": "achatado", "front.ogg": "frente", "full.ogg": "cheio", "giant.ogg": "gigante", "happy.ogg": "feliz", "high.ogg": "alto", "hot.ogg": "quente", "huge.ogg": "enorme", "left.ogg": "esquerdo", "line.ogg": "listrado", "liquid.ogg": "líquido", "magic.ogg": "mágica", "on.ogg": "sobre", "pretty.ogg": "bonita", "right.ogg": "direita", "round.ogg": "redondo", "royal.ogg": "real", "shut.ogg": "fechado", "sick.ogg": "doente", "small.ogg": "pequeno", "spot.ogg": "manchado", "square.ogg": "quadrado", "stand.ogg": "de pé", "straight.ogg": "reto", "stripe.ogg": "listrado", "strong.ogg": "forte", "tall.ogg": "alto", "thick.ogg": "grosso", "tired.ogg": "cansado", "under.ogg": "embaixo", "wet.ogg": "encharcado", - "wheat.ogg": "trigo" + "wheat.ogg": "trigo", + "U0030.ogg": "zero", + "U0031.ogg": "um", + "U0032.ogg": "dois", + "U0033.ogg": "três", + "U0034.ogg": "quatro", + "U0035.ogg": "cinco", + "U0036.ogg": "seis", + "U0037.ogg": "sete", + "U0038.ogg": "oito", + "U0039.ogg": "nove", + "10.ogg": "dez", + "11.ogg": "onze", + "12.ogg": "doze", + "16.ogg": "dezesseis" } diff --git a/tools/menus/photohunter.qml b/src/activities/letter-in-word/ActivityInfo.qml old mode 100644 new mode 100755 similarity index 53% copy from tools/menus/photohunter.qml copy to src/activities/letter-in-word/ActivityInfo.qml index 79e0c2994..9b2b90f9c --- a/tools/menus/photohunter.qml +++ b/src/activities/letter-in-word/ActivityInfo.qml @@ -1,33 +1,35 @@ /* GCompris - ActivityInfo.qml * - * Copyright (C) 2015 Your Name + * Copyright (C) 2016 Akshat Tandon * * 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: "photohunter/Photohunter.qml" + name: "letter-in-word/LetterInWord.qml" difficulty: 2 - icon: "photohunter/photohunter.svg" - author: "Marc Le Douarain <http://membres.lycos.fr/mavati>" + icon: "letter-in-word/letter-in-word.svg" + author: "Akshat Tandon <akshat.tandon@research.iiit.ac.ins>" demo: true - title: qsTr("Photo hunter") - description: qsTr("Find the differences between two pictures") - goal: qsTr("Visual discrimination.") - prerequisite: "" - manual: qsTr("Observe the two pictures carefully. There are some slight differences. When you find a difference you must click on it.") + title: qsTr("Letter in which word") + description: qsTr("A letter is written and/or spoken. Some words are displayed, the children must find the word or the words in which this letter appears.") + //intro: "put here in comment the text for the intro voice" + goal: qsTr("Select all the words which contain the spoken letter.") + prerequisite: qsTr("spellings, letter recognition") + manual: "" credit: "" - section: "/puzzle" + section: "reading" + createdInVersion: 7000 } diff --git a/src/activities/letter-in-word/CMakeLists.txt b/src/activities/letter-in-word/CMakeLists.txt new file mode 100644 index 000000000..ee96cb47f --- /dev/null +++ b/src/activities/letter-in-word/CMakeLists.txt @@ -0,0 +1 @@ +GCOMPRIS_ADD_RCC(activities/letter-in-word *.qml *.svg *.js resource/*) diff --git a/src/activities/letter-in-word/Card.qml b/src/activities/letter-in-word/Card.qml new file mode 100755 index 000000000..0d97ac7bc --- /dev/null +++ b/src/activities/letter-in-word/Card.qml @@ -0,0 +1,178 @@ +/* GCompris - Card.qml + * + * Copyright (C) 2016 Akshat Tandon + * + * Authors: + * Akshat Tandon + * + * 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 QtGraphicalEffects 1.0 +import "../../core" +import "letter-in-word.js" as Activity + +Item { + id: cardItem + //width: cardImage.width + height: wordPic.height + cardImage.height - 30 * ApplicationInfo.ratio + property bool mouseActive: true + + Image { + id: wordPic + sourceSize.width: cardItem.width -6 + sourceSize.height: cardItem.width -5 + fillMode: Image.PreserveAspectFit + source: imgurl + z: -5 + //visible: index % 2 != 0 ? false : true + } + + Image { + id: cardImage + anchors.top: wordPic.bottom + anchors.topMargin: -30 * ApplicationInfo.ratio + sourceSize.width: cardItem.width - 10 + fillMode: Image.PreserveAspectFit + source: Activity.resUrl2 + "cloud.svg" + z: (state == 'scaled') ? 1 : -1 + //visible: index % 2 != 0 ? false : true + + GCText { + id: textItem + z: 11 + // textFound is the rich text with letter found, spelling is the text in the dataset + text:"" + (selected ? textFound : spelling) + "" + property string textFound: spelling + textFormat: Text.RichText + font.pointSize: NaN // need to clear font.pointSize explicitly + font.pixelSize: spelling.length > 5 ? (spelling.length > 7 ? cardImage.width * 0.19 : cardImage.width * 0.25): cardImage.width * 0.30 + font.bold: true + style: Text.Outline + width: cardImage.width + height: cardImage.height + wrapMode: spelling.indexOf(' ') === -1 ? Text.WrapAnywhere : Text.WordWrap + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + styleColor: "#2a2a2a" + } + + ParticleSystemStarLoader { + id: particle + clip: false + } + + states: + State { + name: "scaled"; when: mouseArea.containsMouse && mouseActive + PropertyChanges { + target: cardItem + scale: /*carriageImage.scale * */ 1.2 + z: 2 + } + } + + transitions: Transition { + NumberAnimation { properties: "scale"; easing.type: Easing.OutCubic } + } + + SequentialAnimation { + id: successAnimation + running: selected + loops: 2 + NumberAnimation { + target: cardImage + easing.type: Easing.InOutQuad + property: "rotation" + to: 20; duration: 500 + } + NumberAnimation { + target: cardImage + easing.type: Easing.InOutQuad + property: "rotation"; to: -20 + duration: 500 + } + onRunningChanged: { + if(!running && selected) { + rotationStop.restart() + } + } + } + + SequentialAnimation { + id: failureAnimation + NumberAnimation { + target: colorCardImage + property: "opacity" + to: 1; duration: 400 + } + NumberAnimation { + target: colorCardImage + property: "opacity" + to: 0; duration: 200 + } + } + + NumberAnimation { + id: rotationStop + running: !selected + target: cardImage + property: "rotation" + to: 0 + duration: 500 + easing.type: Easing.InOutQuad + } + } + + Colorize { + id: colorCardImage + z: 5 + anchors.fill: cardImage + source: cardImage + hue: 0.0 + saturation: 1 + opacity: 0 + } + + MouseArea { + id: mouseArea + anchors.fill: parent + hoverEnabled: ApplicationInfo.isMobile ? false : true + onClicked: { + select(); + } + } + + function playWord() { + var locale = ApplicationInfo.getVoicesLocale(items.locale) + activity.audioVoices.append( + ApplicationInfo.getAudioFilePathForLocale(voice, locale)) + } + + function select() { + if(mouseActive && !successAnimation.running) { + if (Activity.checkWord(index)) { + successAnimation.restart(); + particle.burst(30); + textItem.textFound = spelling.replace(RegExp(Activity.currentLetter, "g"), ""+Activity.currentLetter+""); + playWord(); + } + else { + failureAnimation.restart() + } + } + } +} diff --git a/src/activities/letter-in-word/LetterInWord.qml b/src/activities/letter-in-word/LetterInWord.qml new file mode 100755 index 000000000..1074c0ed6 --- /dev/null +++ b/src/activities/letter-in-word/LetterInWord.qml @@ -0,0 +1,331 @@ +/* GCompris - LetterInWord.qml + * + * Copyright (C) 2014 Holger Kaelberer + * 2016 Akshat Tandon + * + * Authors: + * Holger Kaelberer (Click on Letter - Qt Quick port) + * Akshat Tandon (Modifications to Click on Letter code + * to make Letter in which word activity) + * + * 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 QtGraphicalEffects 1.0 +import GCompris 1.0 +import "../../core" +import "letter-in-word.js" as Activity +import "qrc:/gcompris/src/core/core.js" as Core + +ActivityBase { + id: activity + focus: true + + onStart: focus = true + + pageComponent: Image { + id: background + source: Activity.resUrl + "hillside.svg" + sourceSize.width: parent.width + fillMode: Image.PreserveAspectCrop + focus: true + + // system locale by default + property string locale: "system" + + property bool keyboardMode: false + + signal start + signal stop + signal voiceError + + Component.onCompleted: { + dialogActivityConfig.getInitialConfiguration() + activity.start.connect(start) + activity.stop.connect(stop) + } + + QtObject { + id: items + property Item main: activity.main + property alias bar: bar + property alias wordsModel: wordsModel + property GCAudio audioVoices: activity.audioVoices + property alias parser: parser + property alias animateX: animateX + property alias repeatItem: repeatItem + property alias score: score + property alias bonus: bonus + property alias locale: background.locale + property string question + } + + onStart: { + activity.audioVoices.error.connect(voiceError) + Activity.start(items); + } + + onStop: Activity.stop() + + onWidthChanged: { + animateX.restart(); + } + + onHeightChanged: { + animateX.restart(); + } + + 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 + label: qsTr("Select your locale") + } + } + } + } + } + + 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: dialogHelpLeftRight + onClose: home() + } + + Bar { + id: bar + content: BarEnumContent { value: help | home | level | config } + onHelpClicked: { + displayDialog(dialogHelpLeftRight) + } + onPreviousLevelClicked: Activity.previousLevel() + onNextLevelClicked: Activity.nextLevel() + onHomeClicked: home() + onConfigClicked: { + dialogActivityConfig.active = true + dialogActivityConfig.setDefaultValues() + displayDialog(dialogActivityConfig) + } + } + + Score { + id: score + anchors.top: parent.top + anchors.topMargin: 10 * ApplicationInfo.ratio + anchors.left: parent.left + anchors.leftMargin: 10 * ApplicationInfo.ratio + anchors.bottom: undefined + anchors.right: undefined + } + + Bonus { + id: bonus + interval: 100 + Component.onCompleted: { + win.connect(Activity.nextSubLevel); + loose.connect(Activity.incorrectSelection); + } + } + + Item { + id: planeText + width: plane.width + height: plane.height + x: -width + anchors.top: parent.top + anchors.topMargin: 5 * ApplicationInfo.ratio + + Image { + id: plane + anchors.centerIn: planeText + anchors.top: parent.top + source: Activity.resUrl + "plane.svg" + sourceSize.height: itemHeight + } + + GCText { + id: questionItem + anchors.right: planeText.right + anchors.rightMargin: 2 * plane.width / 3 + anchors.verticalCenter: planeText.verticalCenter + anchors.bottomMargin: 10 * ApplicationInfo.ratio + fontSize: hugeSize + font.weight: Font.DemiBold + color: "#2a2a2a" + text: items.question + } + + PropertyAnimation { + id: animateX + target: planeText + properties: "x" + from: -planeText.width + //to:background.width/2 - planeText.width/2 + to: bar.level <= 2 ? background.width/3.7 : background.width + duration: bar.level <= 2 ? 5500: 11000 + //easing.type: Easing.OutQuad + easing.type: bar.level <= 2 ? Easing.OutQuad: Easing.OutInCirc + } + } + + BarButton { + id: repeatItem + source: "qrc:/gcompris/src/core/resource/bar_repeat.svg" + sourceSize.width: 80 * ApplicationInfo.ratio + anchors { + top: parent.top + right: parent.right + margins: 10 + } + onClicked:{ + Activity.playLetter(Activity.currentLetter); + animateX.restart(); + } + } + + Keys.onPressed: { + if(event.key === Qt.Key_Space) { + wordsView.currentItem.select() + } + } + Keys.onReleased: { + keyboardMode = true + event.accepted = false + } + Keys.onEnterPressed: wordsView.currentItem.select(); + Keys.onReturnPressed: wordsView.currentItem.select(); + Keys.onRightPressed: wordsView.moveCurrentIndexRight(); + Keys.onLeftPressed: wordsView.moveCurrentIndexLeft(); + Keys.onDownPressed: wordsView.moveCurrentIndexDown(); + Keys.onUpPressed: wordsView.moveCurrentIndexUp(); + + ListModel { + id: wordsModel + } + + property int itemWidth: Math.min(parent.width / 7.5, parent.height / 6.5) + property int itemHeight: itemWidth * 1.11 + + GridView { + id: wordsView + anchors.bottom: bar.top + anchors.left: parent.left + anchors.right: parent.right + anchors.top: planeText.bottom + anchors.topMargin: 10 * ApplicationInfo.ratio + anchors.leftMargin: 15 * ApplicationInfo.ratio + anchors.rightMargin: 15 * ApplicationInfo.ratio + anchors.bottomMargin: 10 * ApplicationInfo.ratio + cellWidth: itemWidth + 25*ApplicationInfo.ratio + cellHeight: itemHeight + 15*ApplicationInfo.ratio + clip: false + interactive: false + //verticalLayoutDirection: GridView.BottomToTop + layoutDirection: Qt.LeftToRight + + keyNavigationWraps: true + model: wordsModel + delegate: Card { + width: background.itemWidth + Connections { + target: bonus + onStart: { + mouseActive = false; + } + onStop: { + mouseActive = true; + } + } + } + + highlight: Rectangle { + width: wordsView.cellWidth - wordsView.spacing + height: wordsView.cellHeight - wordsView.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 } } + } + } + + JsonParser { + id: parser + onError: console.error("Click_on_letter: Error parsing JSON: " + msg); + } + + } +} diff --git a/src/activities/letter-in-word/letter-in-word.js b/src/activities/letter-in-word/letter-in-word.js new file mode 100755 index 000000000..6f99c9ec3 --- /dev/null +++ b/src/activities/letter-in-word/letter-in-word.js @@ -0,0 +1,260 @@ +/* GCompris - letter-in-word.js + * + * Copyright (C) 2014 Holger Kaelberer + * 2016 Akshat Tandon + * + * Authors: + * Holger Kaelberer (Qt Quick port of click-on-letter) + * Akshat Tandon + * + * 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.0 as Quick +.import GCompris 1.0 as GCompris //for ApplicationInfo +.import "qrc:/gcompris/src/core/core.js" as Core +.import "qrc:/gcompris/src/activities/lang/lang_api.js" as Lang + +var url = "qrc:/gcompris/src/activities/letter-in-word/resource/" +var resUrl = "qrc:/gcompris/src/activities/braille_fun/resource/" +var resUrl2 = "qrc:/gcompris/src/activities/click_on_letter/resource/" + +var levels; +var currentLevel; +var maxLevel; +var currentSubLevel; +var currentLetter; +var maxSubLevel; +var questions; +var words; +var items; +var dataset = null; +var frequency; +var incorrectFlag = false; +var locale; + +function start(_items) { + Core.checkForVoices(_items.main); + items = _items; + // register the voices for the locale + locale = GCompris.ApplicationInfo.getVoicesLocale(items.locale) + GCompris.DownloadManager.updateResource(GCompris.DownloadManager.getVoicesResourceForLocale(locale)) + loadDataset(); + levels = Lang.getAllLessons(dataset) + currentLevel = 0; + currentSubLevel = 0; + maxLevel = levels.length; + initLevel(); +} + +function loadDataset() { + var resourceUrl = "qrc:/gcompris/src/activities/lang/resource/" + dataset = Lang.load(items.parser, resourceUrl, + GCompris.ApplicationSettings.wordset ? "words.json" : "words_sample.json", + "content-"+ locale +".json") + // If dataset is empty, we try to load from short locale + // and if not present again, we switch to default one + var localeUnderscoreIndex = locale.indexOf('_') + if(!dataset) { + var localeShort; + // We will first look again for locale xx (without _XX if exist) + if(localeUnderscoreIndex > 0) { + localeShort = locale.substring(0, localeUnderscoreIndex) + } + else { + localeShort = locale; + } + dataset = Lang.load(items.parser, resourceUrl, + GCompris.ApplicationSettings.wordset ? "words.json" : "words_sample.json", + "content-"+localeShort+ ".json") + } + + if(!dataset) { + // English fallback + dataset = Lang.load(items.parser, resourceUrl, + GCompris.ApplicationSettings.wordset ? "words.json" : "words_sample.json", + "content-en.json") + } + +} + +function stop() { + items.animateX.stop() +} + +function shuffleString(s) { + var a = s; + var n = a.length; + + for(var i = n-1; i > 0; --i) { + var j = Math.floor(Math.random() * (i + 1)); + var tmp = a[i]; + a[i] = a[j]; + a[j] = tmp; + } + return a.join(""); +} + +function initLevel() { + items.bar.level = currentLevel + 1; + if (currentSubLevel == 0 && !incorrectFlag) { + var level = levels[currentLevel]; + words = Lang.getLessonWords(dataset, level); + Core.shuffle(words); + var limit = Math.min(11, words.length) + words = words.slice(0, limit) + frequency = calculateFrequency(); + var tempQuestions = generateQuestions(); + maxSubLevel = tempQuestions.length; + items.score.numberOfSubLevels = maxSubLevel; + items.score.currentSubLevel = 1; + questions = shuffleString(tempQuestions); + items.wordsModel.clear(); + for (var i = 0; i < words.length; i++) { + items.wordsModel.append({ + "spelling": words[i].translatedTxt, + "imgurl": words[i].image, + "selected": false, + "voice": words[i].voice + }); + } + } + else { + items.score.currentSubLevel = currentSubLevel + 1; + } + + incorrectFlag = false; + + for(var i = 0; i < words.length; i++) { + items.wordsModel.setProperty(i, "selected", false); + } + + currentLetter = questions[currentSubLevel]; + items.question = currentLetter + items.animateX.restart(); + + if (GCompris.ApplicationSettings.isAudioVoicesEnabled && + GCompris.DownloadManager.haveLocalResource( + GCompris.DownloadManager.getVoicesResourceForLocale(locale))) { + items.audioVoices.silence(100) + playLetter(currentLetter) + } +} + +function calculateFrequency() { + var freq = []; + //regex pattern to detect whether the character is an english alphabet or some accented latin chacarcter + var pattern = /[A-Za-z\u00C0-\u017F]/; + for(var i = 0; i < words.length; i++) { + var currentWord = words[i].translatedTxt; + for(var j = 0; j < currentWord.length; j++) { + var character = currentWord.charAt(j); + //consider the character if and only if it is an alphabet or an accented latin character + if(pattern.test(character)) { + if(freq[character]) { + freq[character]++; + } + else { + freq[character] = 1; + } + } + } + } + return freq; +} + +function generateQuestions() { + var freqArr = []; + var ques = []; + + for(var character in frequency) { + freqArr.push([character, frequency[character]]); + } + + freqArr.sort(function(a, b) {return b[1] - a[1]}); + + var limit = Math.min(10, freqArr.length); + for(var i = 0; i < limit; i++) { + ques.push(freqArr[i][0]) + } + return ques; +} + +function playLetter(letter) { + items.audioVoices.append(GCompris.ApplicationInfo.getAudioFilePath("voices-$CA/"+locale+"/alphabet/" + + Core.getSoundFilenamForChar(letter))) +} + +function nextLevel() { + items.audioVoices.clearQueue() + if(maxLevel <= ++currentLevel) { + currentLevel = 0 + } + currentSubLevel = 0; + initLevel(); +} + +function previousLevel() { + items.audioVoices.clearQueue() + if(--currentLevel < 0) { + currentLevel = maxLevel - 1 + } + currentSubLevel = 0; + initLevel(); +} + +function nextSubLevel() { + if( ++currentSubLevel >= maxSubLevel) { + currentSubLevel = 0 + nextLevel() + } + initLevel(); +} + +function checkAnswer() { + var hasWordNotFound = false; + var modelEntry; + for(var i = 0; i < words.length; i++) { + modelEntry = items.wordsModel.get(i); + if(modelEntry.spelling.indexOf(currentLetter) != -1 && modelEntry.selected == false) { + hasWordNotFound = true; + break; + } + } + if(hasWordNotFound == false) { + items.bonus.good("flower"); + } +} + +function checkWord(index) { + var modelEntry = items.wordsModel.get(index); + if(modelEntry.spelling.indexOf(currentLetter) != -1) { + items.wordsModel.setProperty(index, "selected", true); + checkAnswer(); + return true; + } + else { + items.bonus.bad("flower"); + return false; + } +} + +function incorrectSelection() { + incorrectFlag = true; + var quesLen = questions.length; + questions = questions.slice(0, currentSubLevel) + questions.slice(currentSubLevel+1, quesLen) + questions.charAt(currentSubLevel); + currentSubLevel--; + nextSubLevel(); +} diff --git a/src/activities/letter-in-word/letter-in-word.svg b/src/activities/letter-in-word/letter-in-word.svg new file mode 100644 index 000000000..dc532e48a --- /dev/null +++ b/src/activities/letter-in-word/letter-in-word.svg @@ -0,0 +1,257 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/activities/louis-braille/louis_braille_data.js b/src/activities/louis-braille/louis_braille_data.js index 01974f4f6..b343ce0fb 100644 --- a/src/activities/louis-braille/louis_braille_data.js +++ b/src/activities/louis-braille/louis_braille_data.js @@ -1,77 +1,77 @@ /* GCompris - louis_braille_data.js * * Copyright (C) 2014 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 . */ var baseUrl = "qrc:/gcompris/src/activities/louis-braille/resource/" var dataset = [ { - "text": qsTr("Born on January 4th 1809 in Coupvary near Paris in France."), + "text": qsTr("Born on January 4th 1809 in Coupvray near Paris in France."), "year": "1809", "img": baseUrl + "louis.png" }, { "text": qsTr("Louis Braille injured his right eye with a stitching awl from his father's workshop."), "year": "1812", "img": baseUrl + "workshop.jpg" }, { "text": qsTr("At the age of three, Louis became blind due to a severe infection that spread to his left eye."), "year": "1812", "img": baseUrl + "fireplace.jpg" }, { "text": qsTr("At the age of 10, he was sent to Paris to study at the Royal Institute for Blind Youth."), "year": "1819", "img": baseUrl + "rnib.jpg" }, { "text": qsTr("He impressed his classmates and began to play the piano and the organ."), "year": "1820", "img": baseUrl + "piano.svg" }, { "text": qsTr("Charles Barbier, a French soldier, visited his school and shared his invention of night writing, a code of 12 raised dots to share information on battlefields."), "year": "1821", "img": baseUrl + "night_printing.jpg" }, { "text": qsTr("Louis trimmed Barbier's 12 dots into 6 and invented the Braille system."), "year": "1824", "img": baseUrl + "braille.jpg" }, { "text": qsTr("He became a teacher after graduating and promoted his method while secretly teaching it at the Institute."), "year": "1828", "img": baseUrl + "teach.jpg" }, { "text": qsTr("He revised and extended braille to include mathematics, symbols, punctuations and music notations."), "year": "1837", "img": baseUrl + "chart.png" }, { "text": qsTr("He died of tuberculosis. He is buried in the Pantheon in Paris. A monument is erected to honor him."), "year": "1852", "img": baseUrl + "statue.jpg" }, { "text": qsTr("Braille got accepted as a world wide standard. Louis Braille proved that if you have motivation you can do incredible things."), "year": "After his Death", "img": baseUrl + "braille_ball.jpg" } ]; diff --git a/src/activities/menu/resource/README b/src/activities/menu/resource/README deleted file mode 100644 index 39d37792a..000000000 --- a/src/activities/menu/resource/README +++ /dev/null @@ -1 +0,0 @@ -new.svg: https://openclipart.org/detail/188492/green-plus \ No newline at end of file diff --git a/src/activities/menu/resource/new.svg b/src/activities/menu/resource/new.svg old mode 100755 new mode 100644 index f64dfedbb..6b545f9b9 --- a/src/activities/menu/resource/new.svg +++ b/src/activities/menu/resource/new.svg @@ -1,184 +1,93 @@ - + + + + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="66" + height="66" + id="svg4211" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="new.svg"> - - - - - - - - - - - - - - + id="defs4213" /> + + + - + id="metadata4216"> + - image/svg+xml + rdf:about=""> + image/svg+xml - - - - Openclipart - - - Green plus - 2013-11-08T13:22:54 - White cross in a green circle - https://openclipart.org/detail/188492/green-plus-by-pleiades-188492 - - - pleiades - - - - - circle - green - plus - - - - - - - - - - - + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + + + + + + + + + + + + diff --git a/src/activities/money/MoneyCore.qml b/src/activities/money/MoneyCore.qml index f38823dcb..8817be980 100644 --- a/src/activities/money/MoneyCore.qml +++ b/src/activities/money/MoneyCore.qml @@ -1,307 +1,308 @@ /* GCompris - MoneyCore.qml * * Copyright (C) 2014 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * 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.1 import "../../core" import "money.js" as Activity ActivityBase { id: activity onStart: focus = true onStop: {} property variant dataset pageComponent: Image { id: background anchors.fill: parent source: Activity.url + "/background.svg" sourceSize.width: parent.width signal start signal stop 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 GCAudio audioEffects: activity.audioEffects property alias answerModel: answerModel property alias pocketModel: pocketModel property alias store: store property alias instructions: instructions property alias tux: tux property alias tuxMoney: tuxMoney property alias bar: bar property alias bonus: bonus } onStart: { Activity.start(items, dataset) } onStop: { Activity.stop() } Column { id: column spacing: 10 x: parent.width * 0.05 y: parent.height * 0.05 width: parent.width * 0.9 property int nbColumns: 5 property int nbLines: 2 property int itemWidth: Math.min(width / nbColumns - 10 - 10 / nbColumns, parent.height * 0.4 / nbLines - 10 - 10 / nbLines) property int itemHeight: itemWidth * 0.59 // === The Answer Area === Rectangle { id: answerArea height: (column.itemHeight + 10) * column.nbLines width: column.width color: "#55333333" border.color: "black" border.width: 2 radius: 5 Flow { anchors.topMargin: 4 anchors.bottomMargin: 4 anchors.leftMargin: 10 anchors.rightMargin: 10 anchors.fill: parent spacing: 10 add: Transition { NumberAnimation { properties: "x" from: parent.width * 0.05 easing.type: Easing.InOutQuad } } move: Transition { NumberAnimation { properties: "x,y" easing.type: Easing.InOutQuad } } Repeater { id: answer model: ListModel { id: answerModel } Image { source: Activity.url + img sourceSize.height: column.itemHeight height: column.itemHeight MultiPointTouchArea { anchors.fill: parent onReleased: Activity.unpay(index) } } } } } // === The Store Area === property int nbStoreColumns: activity.dataset === "BACK_WITHOUT_CENTS" || activity.dataset === "BACK_WITH_CENTS" ? store.model.length + 1 : store.model.length property int itemStoreWidth: Math.min((column.width - storeAreaFlow.spacing * nbStoreColumns) / nbStoreColumns, (parent.height - answerArea.height - pocketArea.height - bar.height) * 0.8) - instructionsArea.realHeight property int itemStoreHeight: itemStoreWidth Rectangle { id: storeArea height: (column.itemStoreHeight + 10) width: column.width color: "#55333333" border.color: "black" border.width: 2 radius: 5 Flow { id: storeAreaFlow anchors.topMargin: 4 anchors.bottomMargin: 4 anchors.leftMargin: 20 anchors.rightMargin: 20 anchors.fill: parent spacing: 40 add: Transition { NumberAnimation { properties: "x" from: parent.width * 0.05 duration: 300 } } Image { id: tux visible: activity.dataset === "BACK_WITHOUT_CENTS" || activity.dataset === "BACK_WITH_CENTS" source: Activity.url + "/tux.svg" sourceSize.height: column.itemStoreHeight sourceSize.width: column.itemStoreHeight Repeater { id: tuxMoney Image { source: Activity.url + modelData.img sourceSize.height: column.itemStoreHeight * 0.4 x: tux.x + index * 20 y: tux.y + tux.height / 2 + index * 20 } } } Repeater { id: store Image { source: Activity.url + modelData.img - sourceSize.height: column.itemStoreHeight - sourceSize.width: column.itemStoreHeight + sourceSize.height: column.itemStoreHeight + sourceSize.width: column.itemStoreHeight GCText { text: modelData.price fontSize: 16 font.weight: Font.DemiBold style: Text.Outline styleColor: "black" color: "white" anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: index % 2 == 0 ? 0 : parent.height - height } } } } } // == The instructions Area == Rectangle { id: instructionsArea height: instructions.height width: column.width color: "#55333333" border.color: "black" border.width: 2 radius: 5 anchors.topMargin: 4 anchors.bottomMargin: 4 anchors.leftMargin: 10 anchors.rightMargin: 10 visible: bar.level === 1 property int realHeight: bar.level === 1 ? height + column.spacing : 0 GCText { id: instructions horizontalAlignment: Text.AlignHCenter width: column.width + height: column.height / 6 wrapMode: Text.WordWrap - fontSize: regularSize + fontSizeMode: Text.Fit } } // === The Pocket Area === Rectangle { id: pocketArea height: (column.itemHeight + 10) * column.nbLines width: column.width color: "#661111AA" border.color: "black" border.width: 2 radius: 5 Flow { anchors.topMargin: 4 anchors.bottomMargin: 4 anchors.leftMargin: 10 anchors.rightMargin: 10 anchors.fill: parent spacing: 10 add: Transition { NumberAnimation { properties: "x" from: parent.width * 0.05 easing.type: Easing.InOutQuad } } move: Transition { NumberAnimation { properties: "x,y" easing.type: Easing.InOutQuad } } Repeater { id: pocket model: ListModel { id: pocketModel } Image { source: Activity.url + img sourceSize.height: column.itemHeight height: column.itemHeight MultiPointTouchArea { anchors.fill: parent onReleased: Activity.pay(index) } } } } } } DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar content: BarEnumContent { value: help | home | level } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() } Bonus { id: bonus Component.onCompleted: win.connect(Activity.nextLevel) } } } diff --git a/src/activities/money/money.js b/src/activities/money/money.js index b26441966..6da9a49b7 100644 --- a/src/activities/money/money.js +++ b/src/activities/money/money.js @@ -1,771 +1,770 @@ /* GCompris - money.js * * Copyright (C) 2014 Bruno Coudoin * * Authors: * Bruno Coudoin (GTK+ version) * 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 . */ .pragma library -.import QtQml 2.2 as Qt .import "qrc:/gcompris/src/core/core.js" as Core 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 var dataset var items var centsMode var backMode var priceTotal function start(items_, datasetName) { items = items_ switch(datasetName) { case "WITHOUT_CENTS": dataset = fullDataset.WITHOUT_CENTS centsMode = false backMode = false break case "WITH_CENTS": dataset = fullDataset.WITH_CENTS centsMode = true backMode = false break case "BACK_WITHOUT_CENTS": dataset = fullDataset.BACK_WITHOUT_CENTS centsMode = false backMode = true break case "BACK_WITH_CENTS": dataset = fullDataset.BACK_WITH_CENTS centsMode = true backMode = true break } currentLevel = 0 numberOfLevel = dataset.length initLevel() } function stop() { } function initLevel() { items.bar.level = currentLevel + 1 items.answerModel.clear() items.pocketModel.clear() var data = dataset[currentLevel] var pocket = Core.shuffle(data.pocket) for (var i in pocket) items.pocketModel.append(pocket[i]) // fill up the store in a random way var storeModel = new Array() priceTotal = Math.floor(data.minPrice + Math.random() * (data.maxPrice - data.minPrice)) var priceCounter = 0 for(var i = 0; i < data.numberOfItem; i++) { var price if(i < data.numberOfItem - 1) // Calc a random price for each item based on the previous prices price = Math.floor((centsMode ? 0 : 1) + Math.random() * ((priceTotal - priceCounter) / data.numberOfItem)) else // Put the remaining missing price on the last item price = priceTotal - priceCounter var cents = 0 if(centsMode) { if(currentLevel === 0) cents += 0.10 + Math.floor(Math.random() * 9) / 10 else cents += 0.01 + Math.floor(Math.random() * 9) / 100 priceTotal += cents price += cents } var priceText = Number(price).toLocaleCurrencyString(Qt.locale()) if(!centsMode) { // Strip floating part priceText = priceText.replace((/.00/), "") } storeModel.push({img: getRandomObject(price), price: priceText}) priceCounter += price } items.store.model = storeModel if(!backMode) { items.instructions.text = 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.") } else { var tuxMoney switch(data.paid) { case 5: tuxMoney = [moneyItems.MONEY_EURO_PAPER_5E] break case 10: tuxMoney = [moneyItems.MONEY_EURO_PAPER_10E] break case 20: tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E] break case 30: tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E, moneyItems.MONEY_EURO_PAPER_10E] break case 40: tuxMoney = [moneyItems.MONEY_EURO_PAPER_20E, moneyItems.MONEY_EURO_PAPER_20E] break case 50: tuxMoney = [moneyItems.MONEY_EURO_PAPER_50E] break case 100: tuxMoney = [moneyItems.MONEY_EURO_PAPER_50E, moneyItems.MONEY_EURO_PAPER_50E] break } items.tuxMoney.model = tuxMoney var tuxTotal = 0 for(var i=0; i < tuxMoney.length; i++) tuxTotal += tuxMoney[i].val var priceText = Number(tuxTotal).toLocaleCurrencyString(Qt.locale()) if(!centsMode) { // Strip floating part priceText = priceText.replace((/.00/), "") } /* The money sign is inserted based on the current locale */ items.instructions.text = qsTr("Tux just bought some items in your shop.\n" + "He gives you %1, please give back his change.") .arg(priceText) } } // Given a price return a random object function getRandomObject(price) { var list if(price < 5) list = cheapObjects else if(price < 10) list = normalObjects else list = expensiveObjects return list[Math.floor(Math.random() * list.length)] } function checkAnswer() { var paid = 0 for (var i = 0; i < items.answerModel.count; ++i) paid += items.answerModel.get(i).val paid = paid.toFixed(2) if(!backMode) { if(paid === priceTotal.toFixed(2)) items.bonus.good("flower") } else { if(paid === (dataset[currentLevel].paid - priceTotal).toFixed(2)) items.bonus.good("flower") } } function pay(index) { items.audioEffects.play(url + "money1.wav") // Add it to the anwser items.answerModel.append(items.pocketModel.get(index)) // Remove it from the pocket items.pocketModel.remove(index, 1) checkAnswer() } function unpay(index) { items.audioEffects.play(url + "money2.wav") // Add it to the pocket items.pocketModel.append(items.answerModel.get(index)) // Remove it from the Answer items.answerModel.remove(index, 1) checkAnswer() } function nextLevel() { if(numberOfLevel <= ++currentLevel ) { currentLevel = 0 } initLevel(); } function previousLevel() { if(--currentLevel < 0) { currentLevel = numberOfLevel - 1 } initLevel(); } diff --git a/src/activities/photo_hunter/PhotoHunter.qml b/src/activities/photo_hunter/PhotoHunter.qml index e0438c2b4..c4ad40505 100644 --- a/src/activities/photo_hunter/PhotoHunter.qml +++ b/src/activities/photo_hunter/PhotoHunter.qml @@ -1,190 +1,191 @@ /* GCompris - PhotoHunter.qml * * Copyright (C) 2016 Stefan Toncu * * Authors: * (GTK+ version) * Stefan Toncu (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 "photo_hunter.js" as Activity ActivityBase { id: activity onStart: focus = true onStop: {} pageComponent: Rectangle { id: background anchors.fill: parent color: "white" signal start signal stop 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 var model property bool notShowed: true property alias img1: img1 property alias img2: img2 property int total property int totalFound: img1.good + img2.good property alias problem: problem property alias frame: frame property int barHeightAddon: ApplicationSettings.isBarHidden ? 1 : 3 property int cellSize: Math.min(background.width / 11 , background.height / (9 + barHeightAddon)) } onStart: { Activity.start(items) } onStop: { Activity.stop() } property bool vert: background.width < background.height property double barHeight: (items.barHeightAddon == 1) ? 0 : bar.height function checkAnswer() { if (items.totalFound === items.model.length) { bonus.good("flower") //remove the problem from the board after first level if (problem.opacity != 0) { Activity.hideProblem() } } } Rectangle { id: problem width: parent.width height: problemText.height anchors.top: parent.top anchors.topMargin: 10 border.width: 2 border.color: "black" color: "red" property alias problemText: problemText GCText { id: problemText anchors.centerIn: parent width: parent.width * 3 / 4 fontSize: mediumSize wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter text: qsTr("Click on the differences between the two images!") color: "white" } MouseArea { anchors.fill: parent onClicked: Activity.hideProblem() } } Rectangle { id: frame color: "transparent" width: background.vert ? img1.width : parent.width - 20 height: parent.height - background.barHeight - 30 anchors.top: problem.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.margins: 10 //left/top image Observe { id: img1 sourceSize.width: background.vert ? undefined : (background.width - 30 - problemText.height) / 2 sourceSize.height: background.vert ? (background.height - background.barHeight - 40 - problemText.height) /2 : background.height - background.barHeight - 30 show: true anchors { top: parent.top horizontalCenter: parent.horizontalCenter horizontalCenterOffset: background.vert ? 0 : -img1.width/2-5 } } //right/bottom image Observe { id: img2 sourceSize.width: background.vert ? undefined : (background.width - 30 - problemText.height) / 2 sourceSize.height: background.vert ? (background.height - background.barHeight - 40 - problemText.height) /2 : background.height - background.barHeight - 30 show: false anchors { top: background.vert ? img1.bottom : parent.top topMargin: background.vert ? 10 : 0 left: background.vert ? img1.left : img1.right leftMargin: background.vert ? 0 : 10 } } } DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar content: BarEnumContent { value: help | home | level } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() } Bonus { id: bonus Component.onCompleted: win.connect(Activity.nextLevel) } Score { anchors { bottom: parent.bottom bottomMargin: 10 * ApplicationInfo.ratio right: parent.right rightMargin: 10 * ApplicationInfo.ratio top: undefined left: undefined } numberOfSubLevels: items.total currentSubLevel: items.totalFound } } } diff --git a/src/activities/reversecount/Reversecount.qml b/src/activities/reversecount/Reversecount.qml index 2e669a5cb..c45e99abc 100644 --- a/src/activities/reversecount/Reversecount.qml +++ b/src/activities/reversecount/Reversecount.qml @@ -1,232 +1,232 @@ /* GCompris - ReverseCount.qml * * Copyright (C) 2014 Emmanuel Charruau * * Authors: * Bruno Coudoin (GTK+ version) * Emmanuel Charruau (Qt Quick port) * Bruno Coudoin (Major rework) * * 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 "reversecount.js" as Activity ActivityBase { id: activity onStart: focus = true onStop: {} pageComponent: Rectangle { id: background anchors.fill: parent color: "#ff00a4b0" signal start signal stop 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 GCAudio audioEffects: activity.audioEffects property alias background: background property alias backgroundImg: backgroundImg property alias bar: bar property alias bonus: bonus property alias chooseDiceBar: chooseDiceBar property alias tux: tux property alias fishToReach: fishToReach property int clockPosition: 4 } onStart: { Activity.start(items) } onStop: { Activity.stop() } Keys.onEnterPressed: Activity.moveTux() Keys.onReturnPressed: Activity.moveTux() onWidthChanged: { if(Activity.fishIndex > 0) { // set x fishToReach.x = Activity.iceBlocksLayout[Activity.fishIndex % Activity.iceBlocksLayout.length][0] * background.width / 5 + (background.width / 5 - tux.width) / 2 // set y fishToReach.y = Activity.iceBlocksLayout[Activity.fishIndex % Activity.iceBlocksLayout.length][1] * (background.height - background.height/5) / 5 + (background.height / 5 - tux.height) / 2 // Move Tux Activity.moveTuxToIceBlock() } } onHeightChanged: { if(Activity.fishIndex > 0) { // set x fishToReach.x = Activity.iceBlocksLayout[Activity.fishIndex % Activity.iceBlocksLayout.length][0] * background.width / 5 + (background.width / 5 - tux.width) / 2 // set y fishToReach.y = Activity.iceBlocksLayout[Activity.fishIndex % Activity.iceBlocksLayout.length][1] * (background.height - background.height/5) / 5 + (background.height / 5 - tux.height) / 2 // Move Tux Activity.moveTuxToIceBlock() } } Image { id: backgroundImg source: Activity.url + Activity.backgrounds[0] sourceSize.height: parent.height * 0.5 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter } // === The ice blocks === Repeater { model: Activity.iceBlocksLayout Image { x: modelData[0] * background.width / 5 y: modelData[1] * (background.height- background.height/5) / 5 width: background.width / 5 height: background.height / 5 source: Activity.url + "iceblock.svg" } } Tux { id: tux sourceSize.width: Math.min(background.width / 6, background.height / 6) z: 11 } Image { id: fishToReach sourceSize.width: Math.min(background.width / 6, background.height / 6) z: 10 property string nextSource property int nextX property int nextY function showParticles() { particles.burst(40) } ParticleSystemStarLoader { id: particles clip: false } onOpacityChanged: { if(opacity == 0) { source = ""; source = nextSource; } } onSourceChanged: { if(source != "") { x = nextX y = nextY opacity = 1 } } Behavior on opacity { NumberAnimation { duration: 500 } } } DialogHelp { id: dialogHelp onClose: home() } Bar { id: bar content: BarEnumContent { value: help | home | level } onHelpClicked: { displayDialog(dialogHelp) } onPreviousLevelClicked: Activity.previousLevel() onNextLevelClicked: Activity.nextLevel() onHomeClicked: activity.home() } Image { id: clock anchors { right: parent.right bottom: parent.bottom margins: 10 } sourceSize.width: 66 * bar.barZoom - property int remainingife: items.clockPosition - onRemainingifeChanged: clockAnim.start() + property int remainingLife: items.clockPosition + onRemainingLifeChanged: if(remainingLife >= 0) clockAnim.restart() SequentialAnimation { id: clockAnim + alwaysRunToEnd: true ParallelAnimation { NumberAnimation { target: clock; properties: "opacity"; to: 0; duration: 800; easing.type: Easing.OutCubic } NumberAnimation { target: clock; properties: "rotation"; from: 0; to: 180; duration: 800; easing.type: Easing.OutCubic } } PropertyAction { target: clock; property: 'source'; value: "qrc:/gcompris/src/activities/reversecount/resource/" + "flower" + items.clockPosition + ".svg" } ParallelAnimation { NumberAnimation { target: clock; properties: "opacity"; to: 1; duration: 800; easing.type: Easing.OutCubic } NumberAnimation { target: clock; properties: "rotation"; from: 180; to: 0; duration: 800; easing.type: Easing.OutCubic } } } } - ChooseDiceBar { id: chooseDiceBar x: background.width / 5 + 20 y: (background.height - background.height/5) * 3 / 5 audioEffects: activity.audioEffects } Bonus { id: bonus winSound: "qrc:/gcompris/src/activities/ballcatch/resource/tuxok.wav" looseSound: "qrc:/gcompris/src/activities/ballcatch/resource/youcannot.wav" onWin: Activity.nextLevel() onLoose: Activity.initLevel() } } } diff --git a/src/activities/reversecount/resource/flower0.svg b/src/activities/reversecount/resource/flower0.svg index 5bace9098..fc1dc7f95 100644 --- a/src/activities/reversecount/resource/flower0.svg +++ b/src/activities/reversecount/resource/flower0.svg @@ -1,206 +1,64 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower1.svg b/src/activities/reversecount/resource/flower1.svg index 1ebdacc0f..436721a0c 100644 --- a/src/activities/reversecount/resource/flower1.svg +++ b/src/activities/reversecount/resource/flower1.svg @@ -1,215 +1,69 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower2.svg b/src/activities/reversecount/resource/flower2.svg index 2706a4b6c..fe3aec3de 100644 --- a/src/activities/reversecount/resource/flower2.svg +++ b/src/activities/reversecount/resource/flower2.svg @@ -1,224 +1,74 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower3.svg b/src/activities/reversecount/resource/flower3.svg index 5c78d144f..a6c7d403a 100644 --- a/src/activities/reversecount/resource/flower3.svg +++ b/src/activities/reversecount/resource/flower3.svg @@ -1,233 +1,79 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower4.svg b/src/activities/reversecount/resource/flower4.svg index 6b19e79fc..532911d73 100644 --- a/src/activities/reversecount/resource/flower4.svg +++ b/src/activities/reversecount/resource/flower4.svg @@ -1,242 +1,84 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower5.svg b/src/activities/reversecount/resource/flower5.svg index b9237d04f..54b5792b0 100644 --- a/src/activities/reversecount/resource/flower5.svg +++ b/src/activities/reversecount/resource/flower5.svg @@ -1,251 +1,89 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/src/activities/reversecount/resource/flower6.svg b/src/activities/reversecount/resource/flower6.svg index cae2342e2..ebadf095e 100644 --- a/src/activities/reversecount/resource/flower6.svg +++ b/src/activities/reversecount/resource/flower6.svg @@ -1,260 +1,94 @@ + + + + image/svg+xmlOpenclipartFlower 7 colors2011-07-25T03:51:40Image of a simple symmetrical seven colors of the flower buds, from the site abc-color.comhttp://openclipart.org/detail/151639/flower-7-colors-by-abc-color.comabc-color.comclip artclipartflower \ No newline at end of file + units="px" + inkscape:window-width="1880" + inkscape:window-height="1051" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/tools/menus/photohunter.qml b/src/activities/roman_numerals/ActivityInfo.qml similarity index 50% rename from tools/menus/photohunter.qml rename to src/activities/roman_numerals/ActivityInfo.qml index 79e0c2994..0deab99c5 100644 --- a/tools/menus/photohunter.qml +++ b/src/activities/roman_numerals/ActivityInfo.qml @@ -1,33 +1,35 @@ /* GCompris - ActivityInfo.qml * - * Copyright (C) 2015 Your Name + * Copyright (C) 2016 Bruno Coudoin < bruno.coudoin@gcompris.net> * * 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: "photohunter/Photohunter.qml" - difficulty: 2 - icon: "photohunter/photohunter.svg" - author: "Marc Le Douarain <http://membres.lycos.fr/mavati>" + name: "roman_numerals/RomanNumerals.qml" + difficulty: 4 + icon: "roman_numerals/roman_numerals.svg" + author: "Bruno Coudoin <bruno.coudoin@gcompris.net>" demo: true - title: qsTr("Photo hunter") - description: qsTr("Find the differences between two pictures") - goal: qsTr("Visual discrimination.") + title: qsTr("Roman numerals") + description: "" + //intro: "Learn and practice roman to arabic numerals conversion" + goal: "" prerequisite: "" - manual: qsTr("Observe the two pictures carefully. There are some slight differences. When you find a difference you must click on it.") + manual: qsTr("A Roman numeral is the name for a number when it is written in the way the Romans used to write numbers. Roman numerals are not used very often today in the west. They are used to write the names of kings and queens, or popes. For example: Queen Elizabeth II. They may be used to write the year a book or movie was made.") credit: "" - section: "/puzzle" + section: "math" + createdInVersion: 7000 } diff --git a/src/activities/roman_numerals/CMakeLists.txt b/src/activities/roman_numerals/CMakeLists.txt new file mode 100644 index 000000000..1b1a4bb34 --- /dev/null +++ b/src/activities/roman_numerals/CMakeLists.txt @@ -0,0 +1 @@ +GCOMPRIS_ADD_RCC(activities/roman_numerals *.qml *.svg *.js resource/*) diff --git a/src/activities/roman_numerals/RomanNumerals.qml b/src/activities/roman_numerals/RomanNumerals.qml new file mode 100644 index 000000000..8c77c963f --- /dev/null +++ b/src/activities/roman_numerals/RomanNumerals.qml @@ -0,0 +1,487 @@ +/* GCompris - roman_numerals.qml + * + * Copyright (C) 2016 Bruno Coudoin + * + * Authors: + * 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 QtQuick 2.1 +import GCompris 1.0 + +import "../../core" + +ActivityBase { + id: activity + + onStart: focus = true + onStop: {} + + + pageComponent: Image { + id: background + source: items.toArabic ? + "qrc:/gcompris/src/activities/roman_numerals/resource/arcs.svg" : + "qrc:/gcompris/src/activities/roman_numerals/resource/torrazzo-crema.svg" + fillMode: Image.PreserveAspectCrop + sourceSize.width: Math.max(parent.width, parent.height) + signal start + signal stop + + 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 alias score: score + property alias textInput: textInput + + property bool toArabic: dataset[currentLevel].toArabic + property string questionText: dataset[currentLevel].question + property string instruction: dataset[currentLevel].instruction + property string questionValue + + property int currentLevel: 0 + property int numberOfLevel: dataset.length + + property var dataset: [ + { + values: ['I', 'V', 'X', 'L', 'C', 'D', 'M'], + instruction: qsTr("Roman numerals, are based on seven symbols: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000."), + question: qsTr("Convert the roman number %1 in arabic."), + toArabic: true + }, + { + values: [1, 5, 10, 50, 100, 500, 1000], + instruction: qsTr("Roman numerals, are based on seven symbols: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['II', 'III', 'VI', 'XX', 'XXII', 'XXX', 'LX', 'CC', 'CCL', 'MM', 'CLX', 'DCCLI', 'CCCLXVI'], + instruction: qsTr("Several symbols create a larger number like II = 2, XX = 20, XI = 11."), + question: qsTr("Convert the roman number %1 in arabic."), + toArabic: true + }, + { + values: [2, 3, 6, 20, 22, 30, 60, 200, 250, 2000, 160, 651, 361], + instruction: qsTr("Several symbols create a larger number like II = 2, XX = 20, XI = 11."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['IV', 'IX', 'XL', 'XC', 'CD', 'CM'], + instruction: qsTr("If a lower value symbol is before a higher value one, it is subtracted. Otherwise it is added. So 'IV' is '4', 'VI' is '6', 'IX' is 9."), + question: qsTr("Convert the roman number %1 in arabic."), + toArabic: true + }, + { + values: [4, 9, 40, 90, 400, 900], + instruction: qsTr("If a lower value symbol is before a higher value one, it is subtracted. Otherwise it is added. So 'IV' is '4', 'VI' is '6', 'IX' is 9."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['VIII', 'LXXX', 'CCCCLXXX', 'DCCC', 'MCCC'], + instruction: qsTr("Only one number is subtracted, not two. So 8 is always VIII and never IIX."), + question: qsTr("Convert the roman number %1 in arabic."), + toArabic: true + }, + { + values: [8, 70, 480, 800, 1300], + instruction: qsTr("Only one number is subtracted, not two. So 8 is always VIII and never IIX."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['XLIX', 'CMXC', 'XCV', 'XLVIII', 'CMXCIX', 'XLVI', 'CXCII', 'CDLXXV'], + instruction: qsTr("Proper form is to subtract only a value with the next lower power of 10. Thus, 900 is written CM, but 990 would not be XM - properly, it is CM for the 900 portion and XC for the 90 portion, or CMXC. Similarly, 999 would not be IM but rather CMXCIX - CM for the 900 portion, XC for the 90 portion, and IX for the 9 portion. Only values starting in 1's are ever used to subtract; 45 is properly XLV, not VL."), + question: qsTr("Convert the roman number %1 in arabic."), + toArabic: true + }, + { + values: [48, 991, 96, 49, 998, 47, 193, 472, 1092], + instruction: qsTr("Proper form is to subtract only a value with the next lower power of 10. Thus, 900 is written CM, but 990 would not be XM - properly, it is CM for the 900 portion and XC for the 90 portion, or CMXC. Similarly, 999 would not be IM but rather CMXCIX - CM for the 900 portion, XC for the 90 portion, and IX for the 9 portion. Only values starting in 1's are ever used to subtract; 45 is properly XLV, not VL."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['_random_', 50 /* up to this number */ , 10 /* sublevels */], + instruction: qsTr("Now you know the rules, you can read and write any numbers in roman numerals."), + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['_random_', 100, 10], + instruction: '', + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['_random_', 500, 10], + instruction: '', + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + }, + { + values: ['_random_', 1000, 10], + instruction: '', + question: qsTr("Convert the arabic number %1 in roman."), + toArabic: false + } + ] + + onQuestionValueChanged: { + textInput.text = '' + romanConverter.arabic = 0 + if(toArabic) + keyboard.populateArabic() + else + keyboard.populateRoman() + + } + + function start() { + if (!ApplicationInfo.isMobile) + textInput.forceActiveFocus(); + items.currentLevel = 0 + initLevel() + } + + function initLevel() { + score.currentSubLevel = 1 + initSubLevel() + } + + function initSubLevel() { + if(dataset[currentLevel].values[0] == '_random_') { + questionValue = Math.round(Math.random() * dataset[currentLevel].values[1] + 1) + score.numberOfSubLevels = dataset[currentLevel].values[2] + } else { + questionValue = dataset[currentLevel].values[score.currentSubLevel - 1] + score.numberOfSubLevels = dataset[currentLevel].values.length + } + } + + function nextLevel() { + if(numberOfLevel - 1 == currentLevel ) { + currentLevel = 0 + } else { + currentLevel++ + } + + initLevel(); + } + + function previousLevel() { + if(currentLevel == 0) { + currentLevel = numberOfLevel - 1 + } else { + currentLevel-- + } + + initLevel(); + } + + function nextSubLevel() { + if(++score.currentSubLevel > score.numberOfSubLevels) { + nextLevel() + } else { + initSubLevel(); + } + } + } + + onStart: { + items.start() + } + onStop: { } + + QtObject { + id: romanConverter + property int arabic + property string roman + + // conversion code copied from: + // http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter + function arabic2Roman(num) { + if (!+num) + return ''; + var digits = String(+num).split(""), + key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM", + "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC", + "","I","II","III","IV","V","VI","VII","VIII","IX"], + roman = "", + i = 3; + while (i--) + roman = (key[+digits.pop() + (i * 10)] || "") + roman; + return new Array(+digits.join("") + 1).join("M") + roman; + } + + function roman2Arabic(str) { + var str = str.toUpperCase(), + validator = /^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/, + token = /[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, + key = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}, + num = 0, m; + if (!(str && validator.test(str))) + return false; + while (m = token.exec(str)) + num += key[m[0]]; + return num; + } + onArabicChanged: roman = arabic2Roman(arabic) + onRomanChanged: arabic = roman2Arabic(roman) + } + + Column { + id: column + anchors.fill: parent + anchors.topMargin: 10 + GCText { + id: questionLabel + anchors.horizontalCenter: parent.horizontalCenter + text: items.questionValue ? items.questionText.arg(items.questionValue) : '' + color: 'white' + Rectangle { + z: -1 + border.color: 'black' + border.width: 1 + anchors.centerIn: parent + width: parent.width * 1.1 + height: parent.height + opacity: 0.8 + gradient: Gradient { + GradientStop { position: 0.0; color: "#000" } + GradientStop { position: 0.9; color: "#666" } + GradientStop { position: 1.0; color: "#AAA" } + } + radius: 10 + } + } + Item { // Just a margin + width: 1 + height: 5 * ApplicationInfo.ratio + } + TextInput { + id: textInput + x: parent.width / 2 + width: 60 * ApplicationInfo.ratio + color: 'white' + text: '' + maximumLength: items.toArabic ? + ('' + romanConverter.roman2Arabic(items.questionValue)).length + 1 : + romanConverter.arabic2Roman(items.questionValue).length + 1 + horizontalAlignment: TextInput.AlignLeft + verticalAlignment: TextInput.AlignVCenter + font.pointSize: questionLabel.pointSize + font.weight: Font.DemiBold + font.family: GCSingletonFontLoader.fontLoader.name + font.capitalization: ApplicationSettings.fontCapitalization + font.letterSpacing: ApplicationSettings.fontLetterSpacing + cursorVisible: true + validator: RegExpValidator{regExp: items.toArabic ? + /[0-9]+/ : + /[ivxlcdmIVXLCDM]*/} + onTextChanged: if(text) { + text = text.toUpperCase(); + if(items.toArabic) + romanConverter.arabic = parseInt(text) + else + romanConverter.roman = text + } + + Rectangle { + z: -1 + opacity: 0.8 + gradient: Gradient { + GradientStop { position: 0.0; color: "#000" } + GradientStop { position: 0.9; color: "#666" } + GradientStop { position: 1.0; color: "#AAA" } + } + radius: 10 + border.color: 'black' + border.width: 1 + anchors.centerIn: parent + width: column.width * 0.7 + height: parent.height + } + + function appendText(car) { + if(car === keyboard.backspace) { + if(text && cursorPosition > 0) { + var oldPos = cursorPosition + text = text.substring(0, cursorPosition - 1) + text.substring(cursorPosition) + cursorPosition = oldPos - 1 + } + return + } + var oldPos = cursorPosition + text = text.substring(0, cursorPosition) + car + text.substring(cursorPosition) + cursorPosition = oldPos + 1 + } + + } + Item { // Just a margin + width: 1 + height: 5 * ApplicationInfo.ratio + } + GCText { + id: feedback + anchors.horizontalCenter: parent.horizontalCenter + text: items.toArabic ? + qsTr("Roman value: %1").arg(value) : + qsTr('Arabic value: %1').arg(value) + onTextChanged: timer.start() + color: 'white' + Rectangle { + z: -1 + opacity: 0.8 + gradient: Gradient { + GradientStop { position: 0.0; color: "#000" } + GradientStop { position: 0.9; color: "#666" } + GradientStop { position: 1.0; color: "#AAA" } + } + radius: 10 + border.color: 'black' + border.width: 1 + anchors.centerIn: parent + width: parent.width * 1.1 + height: parent.height + } + property string value: items.toArabic ? + romanConverter.roman : + romanConverter.arabic ? romanConverter.arabic : '' + } + // We want the entry to be checked after a little timer to make sure we don't trig a + // transient children answer + Timer { + id: timer + interval: 500 + onTriggered: { + if( feedback.value == items.questionValue ) + bonus.good('tux') + } + } + Item { // Just a margin + width: 1 + height: 20 * ApplicationInfo.ratio + } + GCText { + id: instruction + visible: items.instruction != '' + wrapMode: TextEdit.WordWrap + fontSize: tinySize + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width * 0.9 + text: items.instruction + color: 'white' + Rectangle { + z: -1 + opacity: 0.8 + gradient: Gradient { + GradientStop { position: 0.0; color: "#000" } + GradientStop { position: 0.9; color: "#666" } + GradientStop { position: 1.0; color: "#AAA" } + } + radius: 10 + border.color: 'black' + border.width: 1 + anchors.centerIn: parent + width: parent.width * 1.1 + height: parent.contentHeight + } + } + } + + Score { + id: score + anchors.bottom: keyboard.top + currentSubLevel: 0 + numberOfSubLevels: 1 + } + + DialogHelp { + id: dialogHelp + onClose: home() + } + + VirtualKeyboard { + id: keyboard + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + + function populateArabic() { + layout = [ [ + { label: "0" }, + { label: "1" }, + { label: "2" }, + { label: "3" }, + { label: "4" }, + { label: "5" }, + { label: "6" }, + { label: "7" }, + { label: "8" }, + { label: "9" }, + { label: keyboard.backspace } + ] ] + } + + function populateRoman() { + layout = [ [ + { label: "I" }, + { label: "V" }, + { label: "X" }, + { label: "L" }, + { label: "C" }, + { label: "D" }, + { label: "M" }, + { label: keyboard.backspace } + ] ] + } + + onKeypress: textInput.appendText(text) + + onError: console.log("VirtualKeyboard error: " + msg); + } + + Bar { + id: bar + anchors.bottom: keyboard.top + content: BarEnumContent { value: help | home | level } + onHelpClicked: { + displayDialog(dialogHelp) + } + onPreviousLevelClicked: items.previousLevel() + onNextLevelClicked: items.nextLevel() + onHomeClicked: activity.home() + level: items.currentLevel + 1 + + } + + Bonus { + id: bonus + Component.onCompleted: win.connect(items.nextSubLevel) + } + + } +} diff --git a/src/activities/roman_numerals/resource/README b/src/activities/roman_numerals/resource/README new file mode 100644 index 000000000..afc94b855 --- /dev/null +++ b/src/activities/roman_numerals/resource/README @@ -0,0 +1,10 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ + +License: public-domain +Files: terrazzo-crema.svg +Source: https://openclipart.org/download/139573/torrazzo-crema.svg + +License: public-domain +Files: arcs.svg +Source: https://openclipart.org/download/171578/arcs.svg + diff --git a/src/activities/roman_numerals/resource/arcs.svg b/src/activities/roman_numerals/resource/arcs.svg new file mode 100644 index 000000000..7fbe312ef --- /dev/null +++ b/src/activities/roman_numerals/resource/arcs.svg @@ -0,0 +1,2341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + archways + 2012-08-09T13:45:21 + + https://openclipart.org/detail/171578/archways-by-olku-171578 + + + OlKu + + + + + air + arc + arch + archway + building + desert + hacienda + landscape + vector + + + + + + + + + + + diff --git a/src/activities/roman_numerals/resource/torrazzo-crema.svg b/src/activities/roman_numerals/resource/torrazzo-crema.svg new file mode 100644 index 000000000..af911bb8d --- /dev/null +++ b/src/activities/roman_numerals/resource/torrazzo-crema.svg @@ -0,0 +1,1325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Il Torrazzo - Crema CR - Italia + 2011-05-19T19:33:51 + + https://openclipart.org/detail/139573/il-torrazzo---crema-cr---italia-by-dordy + + + dordy + + + + + canvans + cream + crema + disegno + draw + italia + italy + paint + portrait + torrazzo + + + + + + + + + + + diff --git a/src/activities/roman_numerals/roman_numerals.svg b/src/activities/roman_numerals/roman_numerals.svg new file mode 100644 index 000000000..e84c291cb --- /dev/null +++ b/src/activities/roman_numerals/roman_numerals.svg @@ -0,0 +1,633 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + + diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ad75a940e..b161c5e93 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1,280 +1,302 @@ include(qt_helper) configure_file(config.h.in "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY) if(WITH_KIOSK_MODE) add_definitions(-DWITH_KIOSK_MODE) endif() if(SAILFISHOS) add_definitions(-DSAILFISHOS) endif() # Note: put .cpp files before .h files in the following or cmake messes up # moc generation -- WTF! set(gcompris_SRCS ActivityInfo.cpp ActivityInfo.h ActivityInfoTree.cpp ActivityInfoTree.h ApplicationInfo.cpp ApplicationInfo.h ApplicationSettings.cpp ApplicationSettings.h File.cpp File.h DownloadManager.cpp DownloadManager.h ) qt5_wrap_cpp(gcompris_MOC ${gcompris_SRCS}) # Add files that do no need to pass through the moc processor set(gcompris_SRCS ${gcompris_SRCS} main.cpp config.h.in ) if(ANDROID) list(APPEND gcompris_SRCS ApplicationAndroid.cpp) else() list(APPEND gcompris_SRCS ApplicationSettingsDefault.cpp ApplicationInfoDefault.cpp) endif() include_directories( "${CMAKE_CURRENT_BINARY_DIR}" # to find config.h ) # Resources set(GCOMPRIS_RESOURCES "${PROJECT_SOURCE_DIR}/installer") if(CMAKE_HOST_WIN32) set(gcompris_icon GCompris.ico) set(gcompris_RES ${GCOMPRIS_RESOURCES}/${gcompris_icon} GCompris.rc ) elseif(CMAKE_HOST_APPLE) set(gcompris_icon GCompris.icns) set(gcompris_RES ${GCOMPRIS_RESOURCES}/${gcompris_icon}) set_source_files_properties(${gcompris_RES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") endif() if(ANDROID) add_library(${GCOMPRIS_EXECUTABLE_NAME} SHARED ${gcompris_SRCS} ${gcompris_MOC}) qt5_use_modules(${GCOMPRIS_EXECUTABLE_NAME} Qml Quick Gui Multimedia Core Svg Xml XmlPatterns Sensors AndroidExtras) -else() +elseif(CMAKE_HOST_APPLE) add_executable(${GCOMPRIS_EXECUTABLE_NAME} MACOSX_BUNDLE ${gcompris_SRCS} ${gcompris_MOC} ${gcompris_RES}) qt5_use_modules(${GCOMPRIS_EXECUTABLE_NAME} Qml Quick Gui Multimedia Network XmlPatterns Svg Xml Sensors Core) -endif() - -if(CMAKE_HOST_WIN32) - # Remove the console for windows - set_target_properties(${GCOMPRIS_EXECUTABLE_NAME} PROPERTIES LINK_FLAGS -Wl,-subsystem,windows) +elseif(CMAKE_HOST_WIN32) + add_executable(${GCOMPRIS_EXECUTABLE_NAME} WIN32 ${gcompris_SRCS} ${gcompris_MOC} ${gcompris_RES}) + qt5_use_modules(${GCOMPRIS_EXECUTABLE_NAME} Qml Quick Gui Multimedia Network XmlPatterns Svg Xml Sensors Core) +else() + add_executable(${GCOMPRIS_EXECUTABLE_NAME} ${gcompris_SRCS} ${gcompris_MOC} ${gcompris_RES}) + qt5_use_modules(${GCOMPRIS_EXECUTABLE_NAME} Qml Quick Gui Multimedia Network XmlPatterns Svg Xml Sensors Core) endif() GCOMPRIS_ADD_RCC(core *.qml *.js resource/*.${COMPRESSED_AUDIO} resource/*.gif resource/*.png resource/*.svg resource/bonus/* resource/sounds/* resource/fonts/* qmldir) # Installation # ============ install(TARGETS ${GCOMPRIS_EXECUTABLE_NAME} ARCHIVE DESTINATION bin RUNTIME DESTINATION bin LIBRARY DESTINATION lib BUNDLE DESTINATION .) if(BUILD_STANDALONE) # Qt plugins to install set(_qt_plugins "") if(NOT SAILFISHOS) list(APPEND _qt_plugins Qt5::QJpegPlugin) endif() if(APPLE) list(APPEND _qt_plugins Qt5::QTgaPlugin Qt5::QTiffPlugin) elseif(WIN32) list(APPEND _qt_plugins Qt5::QWindowsIntegrationPlugin Qt5::QWindowsAudioPlugin Qt5::AudioCaptureServicePlugin Qt5::DSServicePlugin) elseif(UNIX AND NOT ANDROID AND NOT SAILFISHOS) list(APPEND _qt_plugins Qt5::QXcbIntegrationPlugin) endif() list(APPEND _qt_plugins Qt5::genericSensorPlugin Qt5::QtSensorGesturePlugin Qt5::QShakeSensorGesturePlugin) # Qml plugins to install if(WIN32) set(_lib_prefix "") else() set(_lib_prefix "lib") endif() set(_qt_plugins2 imageformats/${_lib_prefix}qsvg) if(UNIX AND NOT ANDROID AND NOT APPLE AND NOT SAILFISHOS) list(APPEND _qt_plugins2 mediaservice/${_lib_prefix}gstaudiodecoder mediaservice/${_lib_prefix}gstcamerabin mediaservice/${_lib_prefix}gstmediacapture mediaservice/${_lib_prefix}gstmediaplayer) elseif(APPLE) list(APPEND _qt_plugins2 mediaservice/${_lib_prefix}qavfmediaplayer mediaservice/${_lib_prefix}qtmedia_audioengine mediaservice/${_lib_prefix}qavfcamera) endif() set(_qml_plugins QtQuick/Window.2/${_lib_prefix}windowplugin QtQuick/Particles.2/${_lib_prefix}particlesplugin QtQuick.2/${_lib_prefix}qtquick2plugin QtMultimedia/${_lib_prefix}declarative_multimedia QtSensors/${_lib_prefix}declarative_sensors) if(NOT SAILFISHOS) list(APPEND _qml_plugins QtQuick/Controls/${_lib_prefix}qtquickcontrolsplugin QtQuick/Layouts/${_lib_prefix}qquicklayoutsplugin) endif() if(NOT WIN32 AND NOT SAILFISHOS) list(APPEND _qml_plugins - QtAudioEngine/${_lib_prefix}declarative_audioengine - Box2D.2.0/${_lib_prefix}Box2D) + QtAudioEngine/${_lib_prefix}declarative_audioengine) + if (NOT "${QML_BOX2D_MODULE}" STREQUAL "submodule") + list(APPEND _qml_plugins Box2D.2.0/${_lib_prefix}Box2D) + endif() endif() set(GCOMPRIS_OTHER_LIBS) if(APPLE) set(_app gcompris-qt.app) set(_qtconf_destdir ${_app}/Contents/Resources) set(_qt_plugins_destdir ${_app}/Contents/plugins) set(_qt_qml_destdir ${_app}/Contents/qml) set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/${_app}") set_target_properties(gcompris-qt PROPERTIES MACOSX_BUNDLE_INFO_STRING "GCompris, Educational game for children 2 to 10" MACOSX_BUNDLE_ICON_FILE "${gcompris_icon}" MACOSX_BUNDLE_GUI_IDENTIFIER "net.gcompris" MACOSX_BUNDLE_LONG_VERSION_STRING "${GCOMPRIS_MAJOR_VERSION}.${GCOMPRIS_MINOR_VERSION}.${GCOMPRIS_PATCH_VERSION}" MACOSX_BUNDLE_BUNDLE_NAME "gcompris-qt" MACOSX_BUNDLE_SHORT_VERSION_STRING "${GCOMPRIS_VERSION}" MACOSX_BUNDLE_BUNDLE_VERSION "${GCOMPRIS_VERSION}" MACOSX_BUNDLE_COPYRIGHT "GPL License, Copyright 2000-2015 Bruno Coudoin and Others.") set_source_files_properties(${GCOMPRIS_RESOURCES}/${gcompris_icon} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") else() set(_qtconf_destdir bin) set(_qt_plugins_destdir bin/plugins) set(_qt_qml_destdir bin/qml) if(CMAKE_HOST_WIN32) set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/bin/${GCOMPRIS_EXECUTABLE_NAME}.exe") else() set(GCOMPRIS_BUNDLE "\${CMAKE_INSTALL_PREFIX}/bin/${GCOMPRIS_EXECUTABLE_NAME}") endif() endif() # install qt.conf file install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/qt.conf DESTINATION ${_qtconf_destdir}) # install qt plugins foreach(_plugin ${_qt_plugins}) installQtPlugin(${_plugin} ${_qt_plugins_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() foreach(_plugin ${_qt_plugins2}) installQtPlugin2(${_plugin} ${_qt_plugins_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() # install qml plugins foreach(_plugin ${_qml_plugins}) installQmlPlugin(${_plugin} ${_qt_qml_destdir} _lib) list(APPEND GCOMPRIS_OTHER_LIBS ${_lib}) endforeach() # install QtGraphicalEffects (which is not a lib but only qml files) set(_qml_subdir QtGraphicalEffects) getQtQmlPath(_qt_qml_path) install(DIRECTORY ${_qt_qml_path}/QtGraphicalEffects DESTINATION ${_qt_qml_destdir}) # Fix for Linux 'make package' that fails to link with libicu if(UNIX AND NOT APPLE AND NOT SAILFISHOS AND NOT ANDROID) add_library( libicudata SHARED IMPORTED ) - set_target_properties( libicudata PROPERTIES IMPORTED_LOCATION ${Qt5_DIR}/../../libicudata.so.53 ) + FILE(GLOB LIBICUDATA_SO "${Qt5_DIR}/../../libicudata.so.[0-9][0-9]") + if ("${LIBICUDATA_SO}" STREQUAL "") + FILE(GLOB LIBICUDATA_SO "/usr/lib/*/libicudata.so.[0-9][0-9]") + endif() + set_target_properties( libicudata PROPERTIES IMPORTED_LOCATION ${LIBICUDATA_SO} ) add_library( libicui18n SHARED IMPORTED ) - set_target_properties( libicui18n PROPERTIES IMPORTED_LOCATION ${Qt5_DIR}/../../libicui18n.so.53 ) + FILE(GLOB LIBICUI18N_SO "${Qt5_DIR}/../../libicui18n.so.[0-9][0-9]") + if ("${LIBICUI18N_SO}" STREQUAL "") + FILE(GLOB LIBICUI18N_SO "/usr/lib/*/libicui18n.so.[0-9][0-9]") + endif() + set_target_properties( libicui18n PROPERTIES IMPORTED_LOCATION ${LIBICUI18N_SO} ) add_library( libicuuc SHARED IMPORTED ) - set_target_properties( libicuuc PROPERTIES IMPORTED_LOCATION ${Qt5_DIR}/../../libicuuc.so.53 ) + FILE(GLOB LIBICUUC_SO "${Qt5_DIR}/../../libicuuc.so.[0-9][0-9]") + if ("${LIBICUUC_SO}" STREQUAL "") + FILE(GLOB LIBICUUC_SO "/usr/lib/*/libicuuc.so.[0-9][0-9]") + endif() + set_target_properties( libicuuc PROPERTIES IMPORTED_LOCATION ${LIBICUUC_SO} ) TARGET_LINK_LIBRARIES(${GCOMPRIS_EXECUTABLE_NAME} libicudata libicui18n libicuuc) endif() endif(BUILD_STANDALONE) # Hack: do not fixup Qt and Qml plugins on Windows because fixup_bundle takes ages (cmake bug ?) -> Johnny : we need this even if it takes time because some required dependencies are pulled here #if(WIN32) set(GCOMPRIS_OTHER_LIBS "") endif() # install fixup_bundle script to resolve and fixup runtime dependencies if(BUILD_STANDALONE) configure_file(${CMAKE_SOURCE_DIR}/cmake/FixBundle.cmake.in FixBundle.cmake) install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/FixBundle.cmake) # install a startup script for linux bundle if(UNIX AND NOT APPLE AND NOT SAILFISHOS) install(PROGRAMS ../../tools/gcompris-qt.sh DESTINATION bin) endif() endif() if(WIN32) + set(VCREDIST_DIR "" CACHE PATH "Path to vcredist dlls") # install libEGL.dll, libGLESv2.dll, d3dcompiler_47.dll from Qt installation. Not sure if there is a clean way to get them... - # Qt5_Dir is like C:/Qt/Qt5.5.1/5.5/mingw492_32/lib/cmake/Qt5 - install(FILES ${Qt5_DIR}/../../../bin/icudt54.dll DESTINATION bin) - install(FILES ${Qt5_DIR}/../../../bin/icuin54.dll DESTINATION bin) - install(FILES ${Qt5_DIR}/../../../bin/icuuc54.dll DESTINATION bin) - install(FILES ${Qt5_DIR}/../../../bin/libEGL.dll DESTINATION bin) - install(FILES ${Qt5_DIR}/../../../bin/libGLESv2.dll DESTINATION bin) - install(FILES ${Qt5_DIR}/../../../../../Tools/QtCreator/bin/d3dcompiler_47.dll DESTINATION bin) +# Qt5_Dir is like C:/Qt/Qt5.5.1/5.5/mingw492_32/lib/cmake/Qt5 + install(FILES ${Qt5_DIR}/../../../bin/icudt54.dll DESTINATION bin) + install(FILES ${Qt5_DIR}/../../../bin/icuin54.dll DESTINATION bin) + install(FILES ${Qt5_DIR}/../../../bin/icuuc54.dll DESTINATION bin) + install(FILES ${Qt5_DIR}/../../../bin/libEGL.dll DESTINATION bin) + install(FILES ${Qt5_DIR}/../../../bin/libGLESv2.dll DESTINATION bin) + install(FILES ${Qt5_DIR}/../../../../../Tools/QtCreator/bin/d3dcompiler_47.dll DESTINATION bin) + install(FILES ${VCREDIST_DIR}/msvcp140.dll DESTINATION bin) + install(FILES ${VCREDIST_DIR}/vcruntime140.dll DESTINATION bin) endif() # Packaging # ========= set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GCompris is a high quality educational software suite comprising of numerous activities for children aged 2 to 10.") set(CPACK_PACKAGE_VERSION_MAJOR ${GCOMPRIS_MAJOR_VERSION}) set(CPACK_PACKAGE_VERSION_MINOR ${GCOMPRIS_MINOR_VERSION}) set(CPACK_PACKAGE_VERSION_PATCH ${GCOMPRIS_PATCH_VERSION}) set(CPACK_PACKAGE_VERSION ${GCOMPRIS_VERSION}) set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING") set(CPACK_RESOURCE_FILE_README "${PROJECT_SOURCE_DIR}/README") if(WIN32) - set(CPACK_PACKAGE_INSTALL_DIRECTORY "${GCOMPRIS_EXECUTABLE_NAME}") - set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${GCOMPRIS_EXECUTABLE_NAME}") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${GCOMPRIS_EXECUTABLE_NAME}-Qt") + set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${GCOMPRIS_EXECUTABLE_NAME}-Qt") set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/installer\\\\gcompris-header.bmp") set(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}/installer\\\\GCompris-install.ico") set(CPACK_NSIS_MUI_UNIICON "${PROJECT_SOURCE_DIR}/installer\\\\GCompris-uninstall.ico") set(CPACK_NSIS_EXECUTABLES_DIRECTORY "bin") - set(CPACK_PACKAGE_EXECUTABLES "${GCOMPRIS_EXECUTABLE_NAME}" "${GCOMPRIS_EXECUTABLE_NAME}") + set(CPACK_PACKAGE_EXECUTABLES "${GCOMPRIS_EXECUTABLE_NAME};GCompris") + set(CPACK_CREATE_DESKTOP_LINKS "${GCOMPRIS_EXECUTABLE_NAME};GCompris") + set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\gcompris.net") + set(CPACK_NSIS_DISPLAY_NAME "GCompris Educational Software") + set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${GCOMPRIS_EXECUTABLE_NAME}") else(WIN32) set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/GCompris64.png") endif() if(APPLE) set(CPACK_GENERATOR "DragNDrop") set(CPACK_DMG_DS_STORE "${GCOMPRIS_RESOURCES}/dmg_DS_Store") set(CPACK_DMG_BACKGROUND_IMAGE "${GCOMPRIS_RESOURCES}/dmg_background.png") elseif(WIN32) set(CPACK_GENERATOR "NSIS") elseif(SAILFISHOS) configure_file(${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.spec.cmake ${CMAKE_BINARY_DIR}/harbour-gcompris-qt.spec @ONLY) install(FILES ${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.desktop DESTINATION share/applications) install(FILES ${PROJECT_SOURCE_DIR}/platforms/sailfishOS/harbour-gcompris-qt.png DESTINATION share/icons/hicolor/86x86/apps) set(CPACK_RPM_PACKAGE_SUMMARY "gcompris-qt") # BUILD_ARCH is either armv7hl or i486 set(CPACK_RPM_PACKAGE_ARCHITECTURE "${BUILD_ARCH}") set(CPACK_RPM_PACKAGE_NAME "${GCOMPRIS_EXECUTABLE_NAME}") set(CPACK_RPM_PACKAGE_VERSION "${GCOMPRIS_VERSION}") set(CPACK_RPM_PACKAGE_LICENSED "GPLv3") set(CPACK_RPM_PACKAGE_URL "https://www.gcompris.org") set(CPACK_RPM_PACKAGE_DESCRIPTION "GCompris is a high quality educational software suite comprising of numerous activities for children aged 2 to 10.") set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_BINARY_DIR}/harbour-gcompris-qt.spec") set(CMAKE_INSTALL_PREFIX "/usr") set(CPACK_PACKAGING_INSTALL_PREFIX "/usr") set(CPACK_GENERATOR "RPM") else() set(CPACK_GENERATOR "STGZ") endif() include(CPack) diff --git a/src/core/ChangeLog.qml b/src/core/ChangeLog.qml index 5a160c92e..e9099ba04 100644 --- a/src/core/ChangeLog.qml +++ b/src/core/ChangeLog.qml @@ -1,85 +1,85 @@ /* GCompris - ChangeLog.qml * * Copyright (C) 2016 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.1 import GCompris 1.0 /** * Container object with a list of all the changes by version. * @ingroup infrastructure * */ QtObject { /** * type: list * List of changelog objects. * * A changelog object consists of the properties @c versionCode * and an optional @c content (which changes have been added in this version). * The activities added in this version are retrieved from the ActivityInfoTree and directly displayed. * */ property var changelog: [ { "versionCode": 6000, "content": qsTr("A Changelog.") }, { "versionCode": 5200, "content": qsTr("Many little fixes. Lang activity now available in French.") }, { "versionCode": 5000, "content": qsTr("Adding a loading overlay to let the user know that some actions are taking place (loading an activity for example) and can take some seconds. Translations added for: Catalan (Valencian), Chinese Traditional, Finnish (92% translated), Russian (98% translated), Slovak (92% translated), Turkish.") }, { "versionCode": 4000, "content": qsTr("Translations added for: Slovenian, German, Galician.") } ] function isNewerVersion(previousVersion, newVersion) { return newVersion > previousVersion } function getLogBetween(previousVersion, newVersion) { var filtered = changelog.filter(function filter(obj) { return isNewerVersion(previousVersion, obj['versionCode']) }); var output = ""; // Retrieve all the activities created between the two versions ActivityInfoTree.filterCreatedWithinVersions(previousVersion, newVersion); var activities = ActivityInfoTree.menuTree; // display for each version an optional text ("content") then the new activities filtered.map(function filter(obj) { obj['versionCode']; var version = (obj['versionCode'] / 10000).toFixed(2); output += "" + qsTr("Version %1:").arg(version) + ""; output += "
    "; // display free text if exist if(obj['content']) { output += "
  • " + obj['content'] + "
  • "; } // display the activity titles for(var i in activities) { var activity = activities[i]; - if(activity.createdInVersion == obj['versionCode']) { + if(activity.createdInVersion == obj['versionCode'] && activity.enabled) { output += "
  • " + activity.title + "
  • "; } } output += "
"; }); // restore menu context ActivityInfoTree.filterByTag("favorite") ActivityInfoTree.filterLockedActivities() ActivityInfoTree.filterEnabledActivities() return output } } diff --git a/src/core/LanguageList.qml b/src/core/LanguageList.qml index eba416f0f..853e5e661 100644 --- a/src/core/LanguageList.qml +++ b/src/core/LanguageList.qml @@ -1,81 +1,82 @@ /* GCompris - LanguageList.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 /** * Container object with a list of all available translations. * @ingroup infrastructure * * Put here the locales for which we have a good enough translation. */ QtObject { /** * type:list * List of language objects. * * A language object consists of the properties @c text (language string in * the locales' language) and @c locale (locale string of the form * aa_AA.UTF-8). * * The special purpose locale 'system' is used to refer to the system's * standard locale. */ property var languages: [ { "text": qsTr("Your system default"), "locale": "system" }, { "text": "UK English", "locale": "en_GB.UTF-8" }, { "text": "American English", "locale": "en_US.UTF-8" }, //{ "text": "български", "locale": "bg_BG.UTF-8" }, - //{ "text": "Brezhoneg", "locale": "br_FR.UTF-8" }, + { "text": "Brezhoneg", "locale": "br_FR.UTF-8" }, {"text": "Беларуская", "locale": "be_BY.UTF-8" }, { "text": "Català", "locale": "ca_ES.UTF-8" }, //{ "text": "Česká", "locale": "cs_CZ.UTF-8" }, //{ "text": "Dansk", "locale": "da_DK.UTF-8" }, { "text": "Deutsch", "locale": "de_DE.UTF-8" }, //{ "text": "Ελληνικά", "locale": "el_GR.UTF-8" }, { "text": "Español", "locale": "es_ES.UTF-8" }, + { "text": "Eesti", "locale": "et_EE.UTF-8" }, { "text": "Suomi", "locale": "fi_FI.UTF-8" }, { "text": "Français", "locale": "fr_FR.UTF-8" }, //{ "text": "Gàidhlig", "locale": "gd_GB.UTF-8" }, { "text": "Galego", "locale": "gl_ES.UTF-8" }, //{ "text": "Magyar", "locale": "hu_HU.UTF-8" }, { "text": "Italiano", "locale": "it_IT.UTF-8" }, //{ "text": "Lietuvių", "locale": "lt_LT.UTF-8" }, //{ "text": "Latviešu", "locale": "lv_LV.UTF-8" }, { "text": "Nederlands", "locale": "nl_NL.UTF-8" }, { "text": "Norsk (nynorsk)", "locale": "nn_NO.UTF-8" }, { "text": "Polski", "locale": "pl_PL.UTF-8" }, { "text": "Português", "locale": "pt_PT.UTF-8" }, { "text": "Português do Brasil", "locale": "pt_BR.UTF-8" }, { "text": "Română", "locale": "ro_RO.UTF-8" }, { "text": "Русский", "locale": "ru_RU.UTF-8" }, { "text": "Slovenský", "locale": "sk_SK.UTF-8" }, { "text": "Slovenski", "locale": "sl_SI.UTF-8" }, //{ "text": "црногорски jeзик", "locale": "sr_ME.UTF-8" }, { "text": "Svenska", "locale": "sv_FI.UTF-8" }, //{ "text": "தமிழ்", "locale": "ta_IN.UTF-8" }, //{ "text": "ไทย", "locale": "th_TH.UTF-8" }, { "text": "Türk", "locale": "tr_TR.UTF-8" }, { "text": "український", "locale": "uk_UA.UTF-8" }, { "text": "中文(简体)", "locale": "zh_CN.UTF-8" }, { "text": "繁體中文", "locale": "zh_TW.UTF-8" } ] } diff --git a/tools/menus/land_safe.qml b/tools/menus/land_safe.qml deleted file mode 100644 index fa3a282aa..000000000 --- a/tools/menus/land_safe.qml +++ /dev/null @@ -1,39 +0,0 @@ -/* GCompris - ActivityInfo.qml - * - * Copyright (C) 2015 Your Name - * - * 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: "land_safe/LandSafe.qml" - difficulty: 4 - icon: "land_safe/land_safe.svg" - author: "Matilda Bernard <serah4291@gmail.com>" - demo: true - title: qsTr("Land Safe") - description: qsTr("Understanding acceleration due to gravity.") - goal: qsTr("Pilot the spaceship towards the green landing area.") - prerequisite: "" - manual: qsTr(" -Acceleration due to gravity experienced by the spaceship is directly proportional to the mass of the planet and inversely proportional to the square of the distance from the center of the planet. Thus, with every planet the acceleration will differ and as the spaceship comes closer and closer to the planet the acceleration increases. - -Use the up/down keys to control the thrust and the right/left keys to control direction. - -The landing platform is green if your speed is fine for a safe landing. - ") - credit: "" - section: "/experience" -} diff --git a/tools/menus/resource/land_safe.svg b/tools/menus/resource/land_safe.svg deleted file mode 100644 index 8eb5811c0..000000000 --- a/tools/menus/resource/land_safe.svg +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Clipart by Nicu Buculei - piggybank - - - Nicu Buculei - - - - - image/svg+xml - - - - - - - - - diff --git a/tools/menus/resource/photohunter.svg b/tools/menus/resource/photohunter.svg deleted file mode 100644 index 9ec42ef67..000000000 --- a/tools/menus/resource/photohunter.svg +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -