diff --git a/src/activities/gletters/Gletters.qml b/src/activities/gletters/Gletters.qml --- a/src/activities/gletters/Gletters.qml +++ b/src/activities/gletters/Gletters.qml @@ -21,6 +21,7 @@ */ import QtQuick 2.6 +import QtQuick.Controls 1.5 import GCompris 1.0 import "../../core" @@ -32,14 +33,18 @@ // Overload this in your activity to change it // Put you default-.json files in it property string dataSetUrl: "qrc:/gcompris/src/activities/gletters/resource/" - /* no need to display the configuration button for smallnumbers */ - property bool configurationButtonVisible: true property bool uppercaseOnly: false /* mode of the activity, "letter" (gletters) or "word" (wordsgame):*/ property string mode: "letter" + // To show or hide a config option + property var useConfig: { + "useNumberLimit": false, + "useUpperCaseBox": true + } + // Override if you want to replace texts by your image function getImage(key) { return "" @@ -88,6 +93,7 @@ property alias bar: bar property alias bonus: bonus property alias wordlist: wordlist + property int numberLimit: 3 property alias score: score property alias keyboard: keyboard property alias wordDropTimer: wordDropTimer @@ -127,6 +133,7 @@ Item { property alias localeBox: localeBox property alias uppercaseBox: uppercaseBox + property alias numberLimitSlider: numberLimitSlider height: column.height property alias availableLangs: langs.languages @@ -151,10 +158,37 @@ } GCDialogCheckBox { id: uppercaseBox + visible: activity.useConfig["useUpperCaseBox"] width: dialogActivityConfig.width text: qsTr("Uppercase only mode") checked: activity.uppercaseOnly } + Flow { + visible: activity.useConfig["useNumberLimit"] + spacing: 5 + width: dialogActivityConfig.width + GCSlider { + id: numberLimitSlider + width: 250 * ApplicationInfo.ratio + maximumValue: 10 + minimumValue: 3 + value: items.numberLimit + onValueChanged: numberLimitText.text + scrollEnabled: false + } + GCText { + id: numberLimitText + text: qsTr("Maximum Number Limit: %1").arg(numberLimitSlider.value) + fontSize: mediumSize + wrapMode: Text.WordWrap + } + Button { + height: 30 * ApplicationInfo.ratio + text: qsTr("Default"); + style: GCButtonStyle {} + onClicked: numberLimitSlider.value = 3.0 + } + } } } } @@ -164,6 +198,7 @@ if(dataToSave && dataToSave["locale"]) { background.locale = dataToSave["locale"]; activity.uppercaseOnly = dataToSave["uppercaseMode"] === "true" ? true : false; + items.numberLimit = dataToSave["numberLimit"]; } } onSaveData: { @@ -176,7 +211,11 @@ var oldUppercaseMode = activity.uppercaseOnly activity.uppercaseOnly = dialogActivityConfig.configItem.uppercaseBox.checked - dataToSave = {"locale": newLocale, "uppercaseMode": ""+activity.uppercaseOnly} + + var oldNumberLimit = items.numberLimit + items.numberLimit = dialogActivityConfig.configItem.numberLimitSlider.value + + dataToSave = {"locale": newLocale, "uppercaseMode": ""+activity.uppercaseOnly, "numberLimit": items.numberLimit} background.locale = newLocale; // Restart the activity with new information @@ -210,7 +249,7 @@ Bar { id: bar anchors.bottom: keyboard.top - content: BarEnumContent { value: configurationButtonVisible ? (help | home | level | config) : (help | home | level)} + content: BarEnumContent { value: (help | home | level | config)} onHelpClicked: { displayDialog(dialogHelp) } diff --git a/src/activities/gletters/gletters.js b/src/activities/gletters/gletters.js --- a/src/activities/gletters/gletters.js +++ b/src/activities/gletters/gletters.js @@ -290,20 +290,22 @@ var word - if(items.ourActivity.getImage(text)) { + var modText = parseInt(text) % items.numberLimit + "" + + if(items.ourActivity.getImage(modText)) { word = wordComponent.createObject( items.background, { - "text": text, - "image": items.ourActivity.getImage(text), + "text": modText, + "image": items.ourActivity.getImage(modText), // assume x=width-25px for now, Word auto-adjusts onCompleted(): "x": Math.random() * (items.main.width - 25), "y": -25, }); - } else if(items.ourActivity.getDominoValues(text).length) { + } else if(items.ourActivity.getDominoValues(modText).length) { word = wordComponent.createObject( items.background, { - "text": text, - "dominoValues": items.ourActivity.getDominoValues(text), + "text": modText, + "dominoValues": items.ourActivity.getDominoValues(modText), // assume x=width-25px for now, Word auto-adjusts onCompleted(): "x": Math.random() * (items.main.width - 25), "y": -25, diff --git a/src/activities/smallnumbers/Smallnumbers.qml b/src/activities/smallnumbers/Smallnumbers.qml --- a/src/activities/smallnumbers/Smallnumbers.qml +++ b/src/activities/smallnumbers/Smallnumbers.qml @@ -29,8 +29,12 @@ id: activity mode: "letter" + useConfig: { + "useNumberLimit": true, + "useUpperCaseBox": false + } + dataSetUrl: "qrc:/gcompris/src/activities/smallnumbers/resource/" - configurationButtonVisible: false function getImage(key) { return dataSetUrl + "dice" + key + ".svg" diff --git a/src/activities/smallnumbers2/Smallnumbers2.qml b/src/activities/smallnumbers2/Smallnumbers2.qml --- a/src/activities/smallnumbers2/Smallnumbers2.qml +++ b/src/activities/smallnumbers2/Smallnumbers2.qml @@ -29,8 +29,11 @@ id: activity mode: "letter" + useConfig: { + "useNumberLimit": true, + "useUpperCaseBox": false + } dataSetUrl: "qrc:/gcompris/src/activities/smallnumbers2/resource/" - configurationButtonVisible: false function getDominoValues(key) { var val1 = Math.floor(Math.random() * key)