diff --git a/src/activities/menu/ConfigurationItem.qml b/src/activities/menu/ConfigurationItem.qml --- a/src/activities/menu/ConfigurationItem.qml +++ b/src/activities/menu/ConfigurationItem.qml @@ -232,6 +232,45 @@ } } + Flow { // changed here ##### + spacing: 5 + width: parent.width + Slider { + id: numberLimitSlider + width: 250 * ApplicationInfo.ratio + style: GCSliderStyle {} + maximumValue: ApplicationSettings.numberLimitMax + minimumValue: ApplicationSettings.numberLimitMin + stepSize: 1.0 + tickmarksEnabled: true + updateValueWhileDragging: true + value: numberLimit + onValueChanged: ApplicationSettings.numberLimit = value; + MouseArea { // Removes scrolling when hovering sliders + anchors.fill: parent + onWheel: {} + onPressed: { + mouse.accepted = false + } + onReleased: { + mouse.accepted = false + } + } + } + GCText { + id: numberLimitText + text: qsTr("Number Limit") + fontSize: mediumSize + wrapMode: Text.WordWrap + } + Button { + height: 30 * ApplicationInfo.ratio + text: qsTr("Default"); + style: GCButtonStyle {} + onClicked: numberLimitSlider.value = 3.0 + } + } + GCDialogCheckBox { id: enableAutomaticDownloadsBox checked: isAutomaticDownloadsEnabled @@ -549,6 +588,7 @@ property bool isAudioEffectsEnabled: ApplicationSettings.isAudioEffectsEnabled property bool isFullscreen: ApplicationSettings.isFullscreen property bool isVirtualKeyboard: ApplicationSettings.isVirtualKeyboard + property int numberLimit // changed here ##### property bool isAutomaticDownloadsEnabled: ApplicationSettings.isAutomaticDownloadsEnabled property bool sectionVisible: ApplicationSettings.sectionVisible property string wordset: ApplicationSettings.wordset @@ -571,6 +611,8 @@ isVirtualKeyboard = ApplicationSettings.isVirtualKeyboard enableVirtualKeyboardBox.checked = isVirtualKeyboard + numberLimit = ApplicationSettings.numberLimit // changed here ##### + isAutomaticDownloadsEnabled = ApplicationSettings.isAutomaticDownloadsEnabled enableAutomaticDownloadsBox.checked = isAutomaticDownloadsEnabled @@ -614,6 +656,7 @@ ApplicationSettings.isAudioEffectsEnabled = isAudioEffectsEnabled ApplicationSettings.isFullscreen = isFullscreen ApplicationSettings.isVirtualKeyboard = isVirtualKeyboard + ApplicationSettings.numberLimit = numberLimit // changed here ##### ApplicationSettings.isAutomaticDownloadsEnabled = isAutomaticDownloadsEnabled ApplicationSettings.sectionVisible = sectionVisible ApplicationSettings.wordset = wordset @@ -748,6 +791,7 @@ (ApplicationSettings.isAudioEffectsEnabled != isAudioEffectsEnabled) || (ApplicationSettings.isFullscreen != isFullscreen) || (ApplicationSettings.isVirtualKeyboard != isVirtualKeyboard) || + (ApplicationSettings.numberLimit != numberLimit) || // changed here ##### (ApplicationSettings.isAutomaticDownloadsEnabled != isAutomaticDownloadsEnabled) || (ApplicationSettings.baseFontSize != baseFontSize) || (ApplicationSettings.showLockedActivities != showLockedActivities) diff --git a/src/core/ApplicationSettings.h b/src/core/ApplicationSettings.h --- a/src/core/ApplicationSettings.h +++ b/src/core/ApplicationSettings.h @@ -103,6 +103,26 @@ Q_PROPERTY(bool isVirtualKeyboard READ isVirtualKeyboard WRITE setVirtualKeyboard NOTIFY virtualKeyboardChanged) /** + * Limits numbers shown on dominoes, dice, etc. + * + */ + Q_PROPERTY(int numberLimit READ numberLimit WRITE setNumberLimit NOTIFY numberLimitChanged) // changed here ######## + + /** + * Minimum allowed value for numberLimit + * + * Constant value 3 + */ + Q_PROPERTY(int numberLimitMin READ numberLimitMin CONSTANT) + + /** + * Maximum allowed value for numberLimit + * + * Constant value MAX_INT + */ + Q_PROPERTY(int numberLimitMax READ numberLimitMax CONSTANT) + + /** * Locale string for currently active language. */ Q_PROPERTY(QString locale READ locale WRITE setLocale NOTIFY localeChanged) @@ -315,6 +335,15 @@ emit virtualKeyboardChanged(); } + int numberLimit() const { return m_numberLimit; } // changed here ######## + void setNumberLimit(int newNumberlimit) { + m_numberLimit = qMax(qMin(newNumberlimit, numberLimitMax()), numberLimitMin()); + emit numberLimitChanged(); + } + + int numberLimitMin() const { return m_numberLimitMin; } + int numberLimitMax() const { return m_numberLimitMax; } + QString locale() const { return m_locale; } @@ -476,6 +505,7 @@ Q_INVOKABLE void notifyPreviousHeightChanged(); Q_INVOKABLE void notifyPreviousWidthChanged(); Q_INVOKABLE void notifyVirtualKeyboardChanged(); + Q_INVOKABLE void notifyNumberLimitChanged(); // changed here ######## Q_INVOKABLE void notifyLocaleChanged(); Q_INVOKABLE void notifyFontChanged(); Q_INVOKABLE void notifyFontCapitalizationChanged(); @@ -545,6 +575,7 @@ void previousHeightChanged(); void previousWidthChanged(); void virtualKeyboardChanged(); + void numberLimitChanged(); // changed here ######## void localeChanged(); void fontChanged(); void fontCapitalizationChanged(); @@ -583,6 +614,9 @@ quint32 m_previousHeight; quint32 m_previousWidth; bool m_isVirtualKeyboard; + int m_numberLimit; // changed here ######## + const int m_numberLimitMin; + const int m_numberLimitMax; bool m_isAutomaticDownloadsEnabled; bool m_isEmbeddedFont; quint32 m_fontCapitalization; diff --git a/src/core/ApplicationSettings.cpp b/src/core/ApplicationSettings.cpp --- a/src/core/ApplicationSettings.cpp +++ b/src/core/ApplicationSettings.cpp @@ -43,6 +43,7 @@ #define GC_DEFAULT_FONT "Andika-R.otf" #define GC_DEFAULT_FONT_CAPITALIZATION 0 // Font.MixedCase #define GC_DEFAULT_FONT_LETTER_SPACING 0 +#define GC_DEFAULT_NUMBER_LIMIT 3 // changed here ######## static const QString GENERAL_GROUP_KEY = "General"; static const QString ADMIN_GROUP_KEY = "Admin"; @@ -56,6 +57,7 @@ static const QString ENABLE_AUDIO_VOICES_KEY = "enableAudioVoices"; static const QString ENABLE_AUDIO_EFFECTS_KEY = "enableAudioEffects"; static const QString VIRTUALKEYBOARD_KEY = "virtualKeyboard"; +static const QString NUMBER_LIMIT_KEY = "numberLimit"; // changed here ######## static const QString LOCALE_KEY = "locale"; static const QString FONT_KEY = "font"; static const QString IS_CURRENT_FONT_EMBEDDED = "isCurrentFontEmbedded"; @@ -86,8 +88,10 @@ ApplicationSettings *ApplicationSettings::m_instance = NULL; +// changed here ##### ApplicationSettings::ApplicationSettings(QObject *parent): QObject(parent), m_baseFontSizeMin(-7), m_baseFontSizeMax(7), + m_numberLimitMin(3), m_numberLimitMax(INT_MAX), m_fontLetterSpacingMin(0.0), m_fontLetterSpacingMax(8.0), m_config(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + "/gcompris/" + GCOMPRIS_APPLICATION_NAME + ".conf", QSettings::IniFormat) @@ -105,6 +109,7 @@ m_isAudioVoicesEnabled = m_config.value(ENABLE_AUDIO_VOICES_KEY, true).toBool(); m_isVirtualKeyboard = m_config.value(VIRTUALKEYBOARD_KEY, ApplicationInfo::getInstance()->isMobile()).toBool(); + m_numberLimit = m_config.value(NUMBER_LIMIT_KEY, GC_DEFAULT_NUMBER_LIMIT).toUInt(); // changed here ######## m_locale = m_config.value(LOCALE_KEY, GC_DEFAULT_LOCALE).toString(); m_font = m_config.value(FONT_KEY, GC_DEFAULT_FONT).toString(); if(m_font == "Andika-R.ttf") @@ -176,6 +181,7 @@ connect(this, &ApplicationSettings::localeChanged, this, &ApplicationSettings::notifyLocaleChanged); connect(this, &ApplicationSettings::fontChanged, this, &ApplicationSettings::notifyFontChanged); connect(this, &ApplicationSettings::virtualKeyboardChanged, this, &ApplicationSettings::notifyVirtualKeyboardChanged); + connect(this, &ApplicationSettings::numberLimitChanged, this, &ApplicationSettings::notifyNumberLimitChanged); // changed here ######## connect(this, &ApplicationSettings::automaticDownloadsEnabledChanged, this, &ApplicationSettings::notifyAutomaticDownloadsEnabledChanged); connect(this, &ApplicationSettings::filterLevelMinChanged, this, &ApplicationSettings::notifyFilterLevelMinChanged); connect(this, &ApplicationSettings::filterLevelMaxChanged, this, &ApplicationSettings::notifyFilterLevelMaxChanged); @@ -205,6 +211,7 @@ m_config.setValue(PREVIOUS_HEIGHT_KEY, m_previousHeight); m_config.setValue(PREVIOUS_WIDTH_KEY, m_previousWidth); m_config.setValue(VIRTUALKEYBOARD_KEY, m_isVirtualKeyboard); + m_config.setValue(NUMBER_LIMIT_KEY, m_numberLimit); // changed here ######## m_config.setValue(ENABLE_AUTOMATIC_DOWNLOADS, m_isAutomaticDownloadsEnabled); m_config.setValue(FILTER_LEVEL_MIN, m_filterLevelMin); m_config.setValue(FILTER_LEVEL_MAX, m_filterLevelMax); @@ -309,6 +316,12 @@ qDebug() << "virtualkeyboard set to: " << m_isVirtualKeyboard; } +void ApplicationSettings::notifyNumberLimitChanged() // changed here ######## +{ + updateValueInConfig(GENERAL_GROUP_KEY, NUMBER_LIMIT_KEY, m_numberLimit); + qDebug() << "number limit set to: " << m_numberLimit; +} + bool ApplicationSettings::isAutomaticDownloadsEnabled() const { return m_isAutomaticDownloadsEnabled && ApplicationInfo::isDownloadAllowed(); }