diff options
Diffstat (limited to 'src/settings')
-rw-r--r-- | src/settings/CMakeLists.txt | 50 | ||||
-rw-r--r-- | src/settings/dependencies.json | 2 | ||||
-rw-r--r-- | src/settings/plugins.qmltypes | 50 | ||||
-rw-r--r-- | src/settings/qmldir | 5 | ||||
-rw-r--r-- | src/settings/qquickvirtualkeyboardsettings.cpp | 669 | ||||
-rw-r--r-- | src/settings/qquickvirtualkeyboardsettings_p.h | 160 | ||||
-rw-r--r-- | src/settings/qtquickvirtualkeyboardsettingsplugin.cpp | 57 | ||||
-rw-r--r-- | src/settings/qtquickvirtualkeyboardsettingsplugin.h | 50 | ||||
-rw-r--r-- | src/settings/settings.pro | 23 |
9 files changed, 860 insertions, 206 deletions
diff --git a/src/settings/CMakeLists.txt b/src/settings/CMakeLists.txt index 32da7913..7ac69291 100644 --- a/src/settings/CMakeLists.txt +++ b/src/settings/CMakeLists.txt @@ -1,34 +1,46 @@ -# Generated from settings.pro. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause ##################################################################### -## qtquickvirtualkeyboardsettingsplugin Plugin: +## qtvkbsettingsplugin Plugin: ##################################################################### -qt_add_qml_module(qtquickvirtualkeyboardsettingsplugin +qt_internal_add_qml_module(VirtualKeyboardSettings URI "QtQuick.VirtualKeyboard.Settings" - VERSION "2.${CMAKE_PROJECT_VERSION_MINOR}" - CLASSNAME QtQuickVirtualKeyboardSettingsPlugin - DEPENDENCIES - QtQuick/2.0 - SKIP_TYPE_REGISTRATION + VERSION "${PROJECT_VERSION}" + PAST_MAJOR_VERSIONS 2 1 + PLUGIN_TARGET qtvkbsettingsplugin + NO_PLUGIN_OPTIONAL SOURCES - qtquickvirtualkeyboardsettingsplugin.cpp qtquickvirtualkeyboardsettingsplugin.h - PUBLIC_LIBRARIES + qquickvirtualkeyboardsettings.cpp + qquickvirtualkeyboardsettings_p.h + DEFINES + QT_ASCII_CAST_WARNINGS + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_FROM_BYTEARRAY + QT_NO_CAST_TO_ASCII + QT_VIRTUALKEYBOARD_DEFAULT_LAYOUTS_DIR="qrc:${VKB_LAYOUTS_PREFIX}" + LIBRARIES Qt::Core Qt::Gui Qt::Qml Qt::Quick Qt::VirtualKeyboardPrivate + NO_GENERATE_CPP_EXPORTS ) -#### Keys ignored in scope 1:.:.:settings.pro:<TRUE>: -# IMPORT_VERSION = "2.$$QT_MINOR_VERSION" -# OTHER_FILES = "plugins.qmltypes" "qmldir" -# TARGETPATH = "QtQuick/VirtualKeyboard/Settings" +qt_internal_extend_target(VirtualKeyboardSettings CONDITION QT_FEATURE_vkb_no_builtin_style + DEFINES + QT_VIRTUALKEYBOARD_DEFAULT_STYLE="" +) -## Scopes: -##################################################################### +qt_internal_extend_target(VirtualKeyboardSettings CONDITION QT_FEATURE_vkb_retro_style AND NOT QT_FEATURE_vkb_no_builtin_style + DEFINES + QT_VIRTUALKEYBOARD_DEFAULT_STYLE="retro" +) + +qt_internal_extend_target(VirtualKeyboardSettings CONDITION NOT QT_FEATURE_vkb_no_builtin_style AND NOT QT_FEATURE_vkb_retro_style + DEFINES + QT_VIRTUALKEYBOARD_DEFAULT_STYLE="default" +) -#### Keys ignored in scope 2:.:.:settings.pro:WIN32: -# QMAKE_TARGET_DESCRIPTION = "Virtual Keyboard for Qt." -# QMAKE_TARGET_PRODUCT = "Qt Virtual Keyboard (Qt $$QT_VERSION)" diff --git a/src/settings/dependencies.json b/src/settings/dependencies.json deleted file mode 100644 index 0d4f101c..00000000 --- a/src/settings/dependencies.json +++ /dev/null @@ -1,2 +0,0 @@ -[ -] diff --git a/src/settings/plugins.qmltypes b/src/settings/plugins.qmltypes deleted file mode 100644 index 8b1402e6..00000000 --- a/src/settings/plugins.qmltypes +++ /dev/null @@ -1,50 +0,0 @@ -import QtQuick.tooling 1.2 - -// This file describes the plugin-supplied types contained in the library. -// It is used for QML tooling purposes only. -// -// This file was auto-generated by: -// 'qmlplugindump -nonrelocatable -dependencies dependencies.json QtQuick.VirtualKeyboard.Settings 2.14' - -Module { - dependencies: [] - Component { - name: "QtVirtualKeyboard::VirtualKeyboardSettings" - prototype: "QObject" - exports: [ - "QtQuick.VirtualKeyboard.Settings/VirtualKeyboardSettings 1.0", - "QtQuick.VirtualKeyboard.Settings/VirtualKeyboardSettings 1.1", - "QtQuick.VirtualKeyboard.Settings/VirtualKeyboardSettings 1.2", - "QtQuick.VirtualKeyboard.Settings/VirtualKeyboardSettings 2.0", - "QtQuick.VirtualKeyboard.Settings/VirtualKeyboardSettings 2.1" - ] - isCreatable: false - isSingleton: true - exportMetaObjectRevisions: [0, 0, 0, 0, 0] - Property { name: "style"; type: "QUrl"; isReadonly: true } - Property { name: "layoutPath"; type: "QUrl" } - Property { name: "styleName"; type: "string" } - Property { name: "locale"; type: "string" } - Property { name: "availableLocales"; type: "QStringList"; isReadonly: true } - Property { name: "activeLocales"; type: "QStringList" } - Property { - name: "wordCandidateList" - type: "WordCandidateListSettings" - isReadonly: true - isPointer: true - } - Property { name: "fullScreenMode"; type: "bool" } - } - Component { - name: "QtVirtualKeyboard::WordCandidateListSettings" - prototype: "QObject" - exports: [ - "QtQuick.VirtualKeyboard.Settings/WordCandidateListSettings 2.2" - ] - isCreatable: false - exportMetaObjectRevisions: [0] - Property { name: "autoHideDelay"; type: "int" } - Property { name: "alwaysVisible"; type: "bool" } - Property { name: "autoCommitWord"; type: "bool" } - } -} diff --git a/src/settings/qmldir b/src/settings/qmldir deleted file mode 100644 index ac07347d..00000000 --- a/src/settings/qmldir +++ /dev/null @@ -1,5 +0,0 @@ -module QtQuick.VirtualKeyboard.Settings -plugin qtquickvirtualkeyboardsettingsplugin -classname QtQuickVirtualKeyboardSettingsPlugin -typeinfo plugins.qmltypes -depends QtQuick 2.0 diff --git a/src/settings/qquickvirtualkeyboardsettings.cpp b/src/settings/qquickvirtualkeyboardsettings.cpp new file mode 100644 index 00000000..8a0d529b --- /dev/null +++ b/src/settings/qquickvirtualkeyboardsettings.cpp @@ -0,0 +1,669 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include "qquickvirtualkeyboardsettings_p.h" +#include <QtVirtualKeyboard/private/settings_p.h> +#include <QtVirtualKeyboard/private/virtualkeyboarddebug_p.h> +#include <QQmlEngine> +#include <QQmlContext> +#include <QFileInfo> +#include <QDir> +#include <QRegularExpression> +#include <QtCore/private/qobject_p.h> +#include <QtCore/qmutex.h> + +QT_BEGIN_NAMESPACE +namespace QtVirtualKeyboard { + +class QQuickVirtualKeyboardSettingsPrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QQuickVirtualKeyboardSettings) +public: + QQuickVirtualKeyboardSettingsPrivate(QQuickVirtualKeyboardSettings *q_ptr, QQmlEngine *engine) : + QObjectPrivate(), + q_ptr(q_ptr), + engine(engine) + {} + + QString buildStylePath(const QString &path, const QString &name) const + { + QString importPath(path + name + QLatin1String("/style.qml")); + if (!importPath.startsWith(QLatin1String("qrc:"))) { + QUrl url = QUrl::fromLocalFile(importPath); + importPath = url.toString(); + } + return importPath; + } + + QString buildStyleFilePath(const QString &path, const QString &name) const + { + QString filePath(path); + if (filePath.startsWith(QLatin1String("qrc:"))) + filePath.remove(0, 3); + return filePath + name + QLatin1String("/style.qml"); + } + + QStringList qmlImportPathList() const + { + return engine ? engine->importPathList() : QStringList(); + } + + QString stylePath(const QString &name) const + { + if (name.isEmpty()) + return QString(); + + QStringList stylePathList; + stylePathList << QLatin1String("qrc:/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/"); + const QStringList importPathList = qmlImportPathList(); + // Add QML import path (Note: the QML base dir is usually the last entry in the list) + for (int i = importPathList.size() - 1; i >= 0; --i) { + const QString stylesPath = importPathList.at(i) + + QLatin1String("/QtQuick/VirtualKeyboard/Styles/"); + stylePathList += stylesPath; + } + + // Path for backwards compatibility + stylePathList << QLatin1String("qrc:/QtQuick/VirtualKeyboard/content/styles/"); + + for (const QString &stylePath : std::as_const(stylePathList)) { + QString filePath = buildStyleFilePath(stylePath, name); + bool pathExist = false; + pathExist = QFileInfo::exists(filePath); + if (pathExist) + return buildStylePath(stylePath, name); + } + return QString(); + } + + QQuickVirtualKeyboardSettings *q_ptr; + QQmlEngine *engine; + QQuickWordCandidateListSettings wordCandidateListSettings; +}; + +/*! + \qmlmodule QtQuick.VirtualKeyboard.Settings + \title Qt Quick Virtual Keyboard Settings QML Types + \ingroup qmlmodules + + \brief Provides settings for Qt Virtual Keyboard. + + The QML types can be imported into your application using the following + import statements in your .qml file: + + \qml + import QtQuick.VirtualKeyboard.Settings + \endqml +*/ + +/*! + \qmltype VirtualKeyboardSettings + \inqmlmodule QtQuick.VirtualKeyboard.Settings + \ingroup qtvirtualkeyboard-settings-qml + \since QtQuick.VirtualKeyboard 1.2 + \brief Provides settings for virtual keyboard. + + This type provides a VirtualKeyboardSettings singleton instance, + which can be used to configure the virtual keyboard settings. + + Please note that the settings have only effect in the current + application's lifetime, that is, configuration changes are not + permanent. + + For example, to change the keyboard style in application: + + \code + Component.onCompleted: VirtualKeyboardSettings.styleName = "retro" + \endcode +*/ + +/*! + \class QtVirtualKeyboard::VirtualKeyboardSettings + \internal +*/ + +/*! + \internal +*/ +QQuickVirtualKeyboardSettings::QQuickVirtualKeyboardSettings(QQmlEngine *engine, QObject *parent) : + QObject(*new QQuickVirtualKeyboardSettingsPrivate(this, engine), parent) +{ + Q_D(QQuickVirtualKeyboardSettings); + Settings *settings = Settings::instance(); + if (settings->styleName().isEmpty()) + resetStyle(); + if (settings->layoutPath().isEmpty()) + resetLayoutPath(); + connect(settings, SIGNAL(styleChanged()), SIGNAL(styleChanged())); + connect(settings, SIGNAL(styleNameChanged()), SIGNAL(styleNameChanged())); + connect(settings, SIGNAL(localeChanged()), SIGNAL(localeChanged())); + connect(settings, SIGNAL(availableLocalesChanged()), SIGNAL(availableLocalesChanged())); + connect(settings, SIGNAL(activeLocalesChanged()), SIGNAL(activeLocalesChanged())); + connect(settings, SIGNAL(layoutPathChanged()), SIGNAL(layoutPathChanged())); + connect(settings, SIGNAL(wclAutoHideDelayChanged()), &d->wordCandidateListSettings, SIGNAL(autoHideDelayChanged())); + connect(settings, SIGNAL(wclAlwaysVisibleChanged()), &d->wordCandidateListSettings, SIGNAL(alwaysVisibleChanged())); + connect(settings, SIGNAL(wclAutoCommitWordChanged()), &d->wordCandidateListSettings, SIGNAL(autoCommitWordChanged())); + connect(settings, SIGNAL(fullScreenModeChanged()), SIGNAL(fullScreenModeChanged())); + connect(settings, SIGNAL(userDataPathChanged()), SIGNAL(userDataPathChanged())); + settings->connect(this, SIGNAL(userDataReset()), SIGNAL(userDataReset())); + connect(settings, SIGNAL(hwrTimeoutForAlphabeticChanged()), SIGNAL(hwrTimeoutForAlphabeticChanged())); + connect(settings, SIGNAL(hwrTimeoutForCjkChanged()), SIGNAL(hwrTimeoutForCjkChanged())); + connect(settings, SIGNAL(inputMethodHintsChanged()), SIGNAL(inputMethodHintsChanged())); + connect(settings, SIGNAL(handwritingModeDisabledChanged()), SIGNAL(handwritingModeDisabledChanged())); + connect(settings, SIGNAL(defaultInputMethodDisabledChanged()), SIGNAL(defaultInputMethodDisabledChanged())); + connect(settings, SIGNAL(defaultDictionaryDisabledChanged()), SIGNAL(defaultDictionaryDisabledChanged())); + connect(settings, SIGNAL(visibleFunctionKeysChanged()), SIGNAL(visibleFunctionKeysChanged())); +} + +/*! + \internal + TODO: Remove this method when QML stops creating separate singleton instances for each version. + */ +QQuickVirtualKeyboardSettings *QQuickVirtualKeyboardSettings::create( + QQmlEngine *qmlEngine, QJSEngine *) +{ + static QMutex mutex; + static QHash<QQmlEngine *, QQuickVirtualKeyboardSettings *> instances; + QMutexLocker locker(&mutex); + QQuickVirtualKeyboardSettings *&instance = instances[qmlEngine]; + if (instance == nullptr) + instance = new QQuickVirtualKeyboardSettings(qmlEngine); + return instance; +} + +/*! + \internal +*/ +QString QQuickVirtualKeyboardSettings::style() const +{ + return Settings::instance()->style(); +} + +/*! + \internal +*/ +QString QQuickVirtualKeyboardSettings::styleName() const +{ + return Settings::instance()->styleName(); +} + +/*! + \internal +*/ +void QQuickVirtualKeyboardSettings::setStyleName(const QString &styleName) +{ + Q_D(QQuickVirtualKeyboardSettings); + Settings *settings = Settings::instance(); + QString style = d->stylePath(styleName); + if (style.isEmpty()) { + qWarning() << "WARNING: Cannot find style" << styleName << "- fallback:" << settings->styleName(); + return; + } + settings->setStyleName(styleName); + settings->setStyle(style); +} + +/*! + \internal +*/ +QUrl QQuickVirtualKeyboardSettings::layoutPath() const +{ + return Settings::instance()->layoutPath(); +} + +/*! + \internal +*/ +void QQuickVirtualKeyboardSettings::setLayoutPath(const QUrl &layoutPath) +{ + Settings *settings = Settings::instance(); + QDir layoutDirectory(layoutPath.toLocalFile()); + if (!layoutDirectory.exists()) { + qWarning() << "WARNING: Cannot find layout path" << layoutPath; + return; + } + settings->setLayoutPath(layoutPath); +} + +void QQuickVirtualKeyboardSettings::resetLayoutPath() +{ + Settings *settings = Settings::instance(); + QUrl layoutPath(QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_LAYOUTS_DIR)); + const QString customLayoutPath(QDir::fromNativeSeparators(qEnvironmentVariable("QT_VIRTUALKEYBOARD_LAYOUT_PATH"))); + if (!customLayoutPath.isEmpty()) { + bool found = false; + QDir customLayoutDirectory(customLayoutPath); + if (customLayoutDirectory.exists()) { + found = true; + layoutPath = QUrl::fromLocalFile(customLayoutPath); + } else { + customLayoutDirectory = QDir(QUrl(customLayoutPath).toLocalFile()); + if (customLayoutDirectory.exists()) { + found = true; + layoutPath = QUrl(customLayoutPath); + } + } + if (!found) { + qWarning() << "WARNING: Cannot assign custom layout path" << customLayoutPath << "- fallback:" << layoutPath; + } + } + settings->setLayoutPath(layoutPath); +} + +QString QQuickVirtualKeyboardSettings::locale() const +{ + return Settings::instance()->locale(); +} + +void QQuickVirtualKeyboardSettings::setLocale(const QString &locale) +{ + Settings::instance()->setLocale(locale); +} + +QStringList QQuickVirtualKeyboardSettings::availableLocales() const +{ + return Settings::instance()->availableLocales(); +} + +void QQuickVirtualKeyboardSettings::setActiveLocales(const QStringList &activeLocales) +{ + Settings::instance()->setActiveLocales(activeLocales); +} + +QStringList QQuickVirtualKeyboardSettings::activeLocales() const +{ + return Settings::instance()->activeLocales(); +} + +QQuickWordCandidateListSettings *QQuickVirtualKeyboardSettings::wordCandidateList() const +{ + Q_D(const QQuickVirtualKeyboardSettings); + return const_cast<QQuickWordCandidateListSettings *>(&d->wordCandidateListSettings); +} + +bool QQuickVirtualKeyboardSettings::fullScreenMode() const +{ + return Settings::instance()->fullScreenMode(); +} + +void QQuickVirtualKeyboardSettings::setFullScreenMode(bool fullScreenMode) +{ + return Settings::instance()->setFullScreenMode(fullScreenMode); +} + +QString QQuickVirtualKeyboardSettings::userDataPath() const +{ + return Settings::instance()->userDataPath(); +} + +void QQuickVirtualKeyboardSettings::setUserDataPath(const QString &userDataPath) +{ + return Settings::instance()->setUserDataPath(userDataPath); +} + +int QQuickVirtualKeyboardSettings::hwrTimeoutForAlphabetic() const +{ + return Settings::instance()->hwrTimeoutForAlphabetic(); +} + +void QQuickVirtualKeyboardSettings::setHwrTimeoutForAlphabetic(int hwrTimeoutForAlphabetic) +{ + return Settings::instance()->setHwrTimeoutForAlphabetic(hwrTimeoutForAlphabetic); +} + +int QQuickVirtualKeyboardSettings::hwrTimeoutForCjk() const +{ + return Settings::instance()->hwrTimeoutForCjk(); +} + +void QQuickVirtualKeyboardSettings::setHwrTimeoutForCjk(int hwrTimeoutForCjk) +{ + return Settings::instance()->setHwrTimeoutForCjk(hwrTimeoutForCjk); +} + +Qt::InputMethodHints QQuickVirtualKeyboardSettings::inputMethodHints() const +{ + return Settings::instance()->inputMethodHints(); +} + +void QQuickVirtualKeyboardSettings::setInputMethodHints(const Qt::InputMethodHints &inputMethodHints) +{ + Settings::instance()->setInputMethodHints(inputMethodHints); +} + +bool QQuickVirtualKeyboardSettings::isHandwritingModeDisabled() const +{ + return Settings::instance()->isHandwritingModeDisabled(); +} + +void QQuickVirtualKeyboardSettings::setHandwritingModeDisabled(bool handwritingModeDisabled) +{ + Settings::instance()->setHandwritingModeDisabled(handwritingModeDisabled); +} + +bool QQuickVirtualKeyboardSettings::isDefaultInputMethodDisabled() const +{ + return Settings::instance()->isDefaultInputMethodDisabled(); +} + +void QQuickVirtualKeyboardSettings::setDefaultInputMethodDisabled(bool defaultInputMethodDisabled) +{ + return Settings::instance()->setDefaultInputMethodDisabled(defaultInputMethodDisabled); +} + +bool QQuickVirtualKeyboardSettings::isDefaultDictionaryDisabled() const +{ + return Settings::instance()->isDefaultDictionaryDisabled(); +} + +void QQuickVirtualKeyboardSettings::setDefaultDictionaryDisabled(bool defaultDictionaryDisabled) +{ + return Settings::instance()->setDefaultDictionaryDisabled(defaultDictionaryDisabled); +} + +QtVirtualKeyboard::KeyboardFunctionKeys QQuickVirtualKeyboardSettings::visibleFunctionKeys() const +{ + return Settings::instance()->visibleFunctionKeys(); +} + +void QQuickVirtualKeyboardSettings::setVisibleFunctionKeys(QtVirtualKeyboard::KeyboardFunctionKeys newVisibleFunctionKeys) +{ + Settings::instance()->setVisibleFunctionKeys(newVisibleFunctionKeys); +} + +bool QQuickVirtualKeyboardSettings::closeOnReturn() const +{ + return Settings::instance()->closeOnReturn(); +} + +void QQuickVirtualKeyboardSettings::setCloseOnReturn(bool closeOnReturn) +{ + Settings::instance()->setCloseOnReturn(closeOnReturn); +} + +void QQuickVirtualKeyboardSettings::resetStyle() +{ + Q_D(QQuickVirtualKeyboardSettings); + Settings *settings = Settings::instance(); + QString styleName = QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_STYLE); + QString style = d->stylePath(styleName); + QString customStyleName = QString::fromLatin1(qgetenv("QT_VIRTUALKEYBOARD_STYLE")); + if (!customStyleName.isEmpty()) { + bool found = false; + QRegularExpression styleNameValidator(QLatin1String("\\A(?:\\w+)\\z")); + QRegularExpressionMatch match = styleNameValidator.match(customStyleName); + if (match.hasMatch()) { + QString customStyle = d->stylePath(customStyleName); + if (!customStyle.isEmpty()) { + styleName = customStyleName; + style = customStyle; + found = true; + } + } + if (!found) { + qWarning() << "WARNING: Cannot find style" << customStyleName << "- fallback:" << styleName; + } + } + if (!style.isEmpty()) { + settings->setStyleName(styleName); + settings->setStyle(style); + } +} + +/*! + \qmlproperty string VirtualKeyboardSettings::style + \internal +*/ + +/*! + \qmlproperty string VirtualKeyboardSettings::styleName + + This property provides the current style. Application can change + the keyboard style by setting the styleName to different value. + + The system wide keyboard style can be affected by setting + the QT_VIRTUALKEYBOARD_STYLE environment variable. +*/ + +/*! + \qmlproperty string VirtualKeyboardSettings::locale + \since QtQuick.VirtualKeyboard.Settings 2.0 + + This property provides the default locale for the keyboard. + + When the locale is not specified, the default system locale is used instead. + + If the keyboard locale is different from the new default locale, keyboard + language is changed immediately to reflect the new locale. If the locale setting + is incorrect, or it is not in the list of supported locales, it is ignored and + the default setting is used instead. + + A locale is supported if it is included in the list of availableLocales. +*/ + +/*! + \qmlproperty list<string> VirtualKeyboardSettings::availableLocales + \since QtQuick.VirtualKeyboard.Settings 2.0 + \readonly + + This property contains a list of languages supported by the virtual keyboard. + + This list is read-only and depends on the build-time configuration of the + virtual keyboard. +*/ + +/*! + \qmlproperty list<string> VirtualKeyboardSettings::activeLocales + \since QtQuick.VirtualKeyboard.Settings 2.0 + + This property contains a list of activated languages of the virtual keyboard. + + The list of active languages is a subset of the available languages, and can be + used to limit the list of available languages in the application lifetime. + + The list of languages will be shown based on the specified ordering. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::fullScreenMode + \since QtQuick.VirtualKeyboard.Settings 2.2 + + This property enables the fullscreen mode for the virtual keyboard. + + In fullscreen mode, the virtual keyboard replicates the contents of the + focused input field to the fullscreen input field located at the top of the + keyboard. + + For example, to activate the fullscreen mode when the screen aspect ratio + is greater than 16:9: + + \code + Binding { + target: VirtualKeyboardSettings + property: "fullScreenMode" + value: (Screen.width / Screen.height) > (16.0 / 9.0) + } + \endcode +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::userDataPath + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property sets the user data path for the virtual keyboard and its plugins. + + By default, the user data path is set to \l {QStandardPaths::GenericConfigLocation}{GenericConfigLocation} + "/qtvirtualkeyboard". +*/ + +/*! + \qmlsignal VirtualKeyboardSettings::userDataReset() + + The application triggers this signal prior to the user's data being reset to + indicate to the virtual keyboard that all files must be closed + in the user data directory. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForAlphabetic + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property sets the handwriting recognition timeout for alphabetical languages. + + By default, the timeout is 500 millliseconds. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForCjk + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property sets the handwriting recognition timeout for Chinese / Japanese / Korean languages. + + By default, the timeout is 500 millliseconds. +*/ + +/*! + \qmlproperty int VirtualKeyboardSettings::inputMethodHints + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property allows to set persistent input method hints. + + The value of this property is combined with the input method + hints from the input control. For example, to disable predictive + text input, this property can be set to \c Qt::ImhNoPredictiveText. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::handwritingModeDisabled + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property allows to disable handwriting input mode, if it is + otherwise available in the system. + + When this property is set to \c true, the handwriting button is hidden + from the keyboard layout and the user cannot switch to handwriting + input mode. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::defaultInputMethodDisabled + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property disables the default input method. The purpose of this setting is to be able to + override the default input method with the plain input method, disabling its functionality. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::defaultDictionaryDisabled + \since QtQuick.VirtualKeyboard.Settings 6.1 + + This property disables the default dictionary. The purpose of this setting is to be able to + use a custom dictionary only instead of the standard dictionary. +*/ + +/*! + \qmlproperty enumeration VirtualKeyboardSettings::visibleFunctionKeys + \since QtQuick.VirtualKeyboard.Settings 6.6 + + This setting adjusts the visibility of specific function keys in the keyboard layout, allowing + them to be either displayed or hidden. When a function key is not visible, its functionality + remains accessible through the gear menu. + + The value can be combination of the following flags: + + \list + \li \c QtVirtualKeyboard.KeyboardFunctionKeys.None All function keys are hidden + \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Hide Hide function key is visible + \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Language Language function key is visible + \li \c QtVirtualKeyboard.KeyboardFunctionKeys.All All function keys are visible + \endlist + + The default is \c QtVirtualKeyboard.KeyboardFunctionKeys.All. +*/ + +/*! + \qmlproperty bool VirtualKeyboardSettings::closeOnReturn + \since QtQuick.VirtualKeyboard.Settings 6.8 + + This property enables hiding of virtual keyboard. + + When this property is set to \c true, the virtual keyboard is hidden when \l Qt::Key_Enter + or \l Qt::Key_Return key released. The default is \c false. +*/ + +/*! + \since QtQuick.VirtualKeyboard.Settings 2.2 + \qmlproperty int VirtualKeyboardSettings::wordCandidateList.autoHideDelay + \qmlproperty bool VirtualKeyboardSettings::wordCandidateList.alwaysVisible + + \table + \header + \li Name + \li Description + \row + \li autoHideDelay + \li This property defines the delay, in milliseconds, after which the + word candidate list is hidden if empty. + + If the value is \c 0, the list is immediately hidden when cleared. + + If the value is \c -1, the list is visible until input focus + changes, or the input panel is hidden. + + The default value is \c 5000 milliseconds. + \row + \li alwaysVisible + \li This property defines whether the word candidate list should always + remain visible. + + The default value is \c false. + \row + \li autoCommitWord + \li This property enables the automatic commit feature that is activated + when the word candidate list is narrowed down to a single candidate. + + The automatic commit feature takes effect when the word candidate + list initially contains multiple words and is reduced to single word + after additional input. This word will be selected and committed + automatically without user interaction. + + This property is set to \c false by default. + \endtable +*/ + +QQuickWordCandidateListSettings::QQuickWordCandidateListSettings(QObject *parent) : + QObject(parent) +{ +} + +int QQuickWordCandidateListSettings::autoHideDelay() const +{ + return Settings::instance()->wclAutoHideDelay(); +} + +void QQuickWordCandidateListSettings::setAutoHideDelay(int autoHideDelay) +{ + Settings::instance()->setWclAutoHideDelay(autoHideDelay); +} + +bool QQuickWordCandidateListSettings::alwaysVisible() const +{ + return Settings::instance()->wclAlwaysVisible(); +} + +void QQuickWordCandidateListSettings::setAlwaysVisible(bool alwaysVisible) +{ + Settings::instance()->setWclAlwaysVisible(alwaysVisible); +} + +bool QQuickWordCandidateListSettings::autoCommitWord() const +{ + return Settings::instance()->wclAutoCommitWord(); +} + +void QQuickWordCandidateListSettings::setAutoCommitWord(bool autoCommitWord) +{ + Settings::instance()->setWclAutoCommitWord(autoCommitWord); +} + +} // namespace QtVirtualKeyboard +QT_END_NAMESPACE diff --git a/src/settings/qquickvirtualkeyboardsettings_p.h b/src/settings/qquickvirtualkeyboardsettings_p.h new file mode 100644 index 00000000..3f03ff80 --- /dev/null +++ b/src/settings/qquickvirtualkeyboardsettings_p.h @@ -0,0 +1,160 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#ifndef VIRTUALKEYBOARDSETTINGS_H +#define VIRTUALKEYBOARDSETTINGS_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtVirtualKeyboard/private/qvirtualkeyboardnamespace_p.h> +#include <QtQml/qqml.h> +#include <QtCore/private/qglobal_p.h> + +QT_BEGIN_NAMESPACE +namespace QtVirtualKeyboard { + +class QQuickWordCandidateListSettings; +class QQuickVirtualKeyboardSettingsPrivate; + +class QQuickVirtualKeyboardSettings : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QQuickVirtualKeyboardSettings) + Q_PROPERTY(QUrl style READ style NOTIFY styleChanged) + Q_PROPERTY(QUrl layoutPath READ layoutPath WRITE setLayoutPath NOTIFY layoutPathChanged) + Q_PROPERTY(QString styleName READ styleName WRITE setStyleName NOTIFY styleNameChanged) + Q_PROPERTY(QString locale READ locale WRITE setLocale NOTIFY localeChanged) + Q_PROPERTY(QStringList availableLocales READ availableLocales NOTIFY availableLocalesChanged) + Q_PROPERTY(QStringList activeLocales READ activeLocales WRITE setActiveLocales NOTIFY activeLocalesChanged) + Q_PROPERTY(QQuickWordCandidateListSettings *wordCandidateList READ wordCandidateList CONSTANT) + Q_PROPERTY(bool fullScreenMode READ fullScreenMode WRITE setFullScreenMode NOTIFY fullScreenModeChanged) + Q_PROPERTY(QString userDataPath READ userDataPath WRITE setUserDataPath NOTIFY userDataPathChanged REVISION(6, 1)) + Q_PROPERTY(int hwrTimeoutForAlphabetic READ hwrTimeoutForAlphabetic WRITE setHwrTimeoutForAlphabetic NOTIFY hwrTimeoutForAlphabeticChanged REVISION(6, 1)) + Q_PROPERTY(int hwrTimeoutForCjk READ hwrTimeoutForCjk WRITE setHwrTimeoutForCjk NOTIFY hwrTimeoutForCjkChanged REVISION(6, 1)) + Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints NOTIFY inputMethodHintsChanged REVISION(6, 1)) + Q_PROPERTY(bool handwritingModeDisabled READ isHandwritingModeDisabled WRITE setHandwritingModeDisabled NOTIFY handwritingModeDisabledChanged REVISION(6, 1)) + Q_PROPERTY(bool defaultInputMethodDisabled READ isDefaultInputMethodDisabled WRITE setDefaultInputMethodDisabled NOTIFY defaultInputMethodDisabledChanged REVISION(6, 1)) + Q_PROPERTY(bool defaultDictionaryDisabled READ isDefaultDictionaryDisabled WRITE setDefaultDictionaryDisabled NOTIFY defaultDictionaryDisabledChanged REVISION(6, 1)) + Q_PROPERTY(QtVirtualKeyboard::KeyboardFunctionKeys visibleFunctionKeys READ visibleFunctionKeys WRITE setVisibleFunctionKeys NOTIFY visibleFunctionKeysChanged REVISION(6, 6)) + Q_PROPERTY(bool closeOnReturn READ closeOnReturn WRITE setCloseOnReturn NOTIFY closeOnReturnChanged REVISION(6, 8)) + QML_NAMED_ELEMENT(VirtualKeyboardSettings) + QML_SINGLETON + QML_ADDED_IN_VERSION(1, 0) + QML_EXTRA_VERSION(2, 0) + + explicit QQuickVirtualKeyboardSettings(QQmlEngine *engine, QObject *parent = nullptr); + +public: + static QQuickVirtualKeyboardSettings *create(QQmlEngine *qmlEngine, QJSEngine *jsEngine); + QString style() const; + + QUrl layoutPath() const; + void setLayoutPath(const QUrl &layoutPath); + + QString styleName() const; + void setStyleName(const QString &styleName); + + QString locale() const; + void setLocale(const QString &locale); + + QStringList availableLocales() const; + + void setActiveLocales(const QStringList &activeLocales); + QStringList activeLocales() const; + + QQuickWordCandidateListSettings *wordCandidateList() const; + + bool fullScreenMode() const; + void setFullScreenMode(bool fullScreenMode); + + QString userDataPath() const; + void setUserDataPath(const QString &userDataPath); + + int hwrTimeoutForAlphabetic() const; + void setHwrTimeoutForAlphabetic(int hwrTimeoutForAlphabetic); + + int hwrTimeoutForCjk() const; + void setHwrTimeoutForCjk(int hwrTimeoutForCjk); + + Qt::InputMethodHints inputMethodHints() const; + void setInputMethodHints(const Qt::InputMethodHints &inputMethodHints); + + bool isHandwritingModeDisabled() const; + void setHandwritingModeDisabled(bool handwritingModeDisabled); + + bool isDefaultInputMethodDisabled() const; + void setDefaultInputMethodDisabled(bool defaultInputMethodDisabled); + + bool isDefaultDictionaryDisabled() const; + void setDefaultDictionaryDisabled(bool defaultDictionaryDisabled); + + QtVirtualKeyboard::KeyboardFunctionKeys visibleFunctionKeys() const; + void setVisibleFunctionKeys(QtVirtualKeyboard::KeyboardFunctionKeys newVisibleFunctionKeys); + + bool closeOnReturn() const; + void setCloseOnReturn(bool enable); + +signals: + void styleChanged(); + void styleNameChanged(); + void localeChanged(); + void availableLocalesChanged(); + void activeLocalesChanged(); + void layoutPathChanged(); + void fullScreenModeChanged(); + Q_REVISION(6, 1) void userDataPathChanged(); + Q_REVISION(6, 1) void userDataReset(); + Q_REVISION(6, 1) void hwrTimeoutForAlphabeticChanged(); + Q_REVISION(6, 1) void hwrTimeoutForCjkChanged(); + Q_REVISION(6, 1) void inputMethodHintsChanged(); + Q_REVISION(6, 1) void handwritingModeDisabledChanged(); + Q_REVISION(6, 1) void defaultInputMethodDisabledChanged(); + Q_REVISION(6, 1) void defaultDictionaryDisabledChanged(); + Q_REVISION(6, 6) void visibleFunctionKeysChanged(); + Q_REVISION(6, 8) void closeOnReturnChanged(); + +private: + void resetStyle(); + void resetLayoutPath(); +}; + +class QQuickWordCandidateListSettings : public QObject +{ + Q_OBJECT + Q_PROPERTY(int autoHideDelay READ autoHideDelay WRITE setAutoHideDelay NOTIFY autoHideDelayChanged) + Q_PROPERTY(bool alwaysVisible READ alwaysVisible WRITE setAlwaysVisible NOTIFY alwaysVisibleChanged) + Q_PROPERTY(bool autoCommitWord READ autoCommitWord WRITE setAutoCommitWord NOTIFY autoCommitWordChanged) + QML_ANONYMOUS + + explicit QQuickWordCandidateListSettings(QObject *parent = nullptr); + friend class QQuickVirtualKeyboardSettingsPrivate; + +public: + int autoHideDelay() const; + void setAutoHideDelay(int autoHideDelay); + + bool alwaysVisible() const; + void setAlwaysVisible(bool alwaysVisible); + + bool autoCommitWord() const; + void setAutoCommitWord(bool autoCommitWord); + +signals: + void autoHideDelayChanged(); + void alwaysVisibleChanged(); + void autoCommitWordChanged(); +}; + +} // namespace QtVirtualKeyboard +QT_END_NAMESPACE + +#endif // VIRTUALKEYBOARDSETTINGS_H diff --git a/src/settings/qtquickvirtualkeyboardsettingsplugin.cpp b/src/settings/qtquickvirtualkeyboardsettingsplugin.cpp deleted file mode 100644 index 06758db8..00000000 --- a/src/settings/qtquickvirtualkeyboardsettingsplugin.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtquickvirtualkeyboardsettingsplugin.h" -#include <QtVirtualKeyboard/private/virtualkeyboardsettings_p.h> -#include <QtVirtualKeyboard/private/qvirtualkeyboard_staticplugin_p.h> - -QT_BEGIN_NAMESPACE - -using namespace QtVirtualKeyboard; - -void QtQuickVirtualKeyboardSettingsPlugin::registerTypes(const char *uri) -{ -#if defined(QT_STATICPLUGIN) - Q_VKB_IMPORT_PLUGIN(QtQuick2Plugin) -#endif - - qmlRegisterSingletonType<VirtualKeyboardSettings>(uri, 1, 0, "VirtualKeyboardSettings", VirtualKeyboardSettings::registerSettingsModule); - qmlRegisterSingletonType<VirtualKeyboardSettings>(uri, 1, 1, "VirtualKeyboardSettings", VirtualKeyboardSettings::registerSettingsModule); - qmlRegisterSingletonType<VirtualKeyboardSettings>(uri, 1, 2, "VirtualKeyboardSettings", VirtualKeyboardSettings::registerSettingsModule); - qmlRegisterSingletonType<VirtualKeyboardSettings>(uri, 2, 0, "VirtualKeyboardSettings", VirtualKeyboardSettings::registerSettingsModule); - qmlRegisterSingletonType<VirtualKeyboardSettings>(uri, 2, 1, "VirtualKeyboardSettings", VirtualKeyboardSettings::registerSettingsModule); - qRegisterMetaType<WordCandidateListSettings *>("WordCandidateListSettings*"); - qmlRegisterUncreatableType<WordCandidateListSettings>(uri, 2, 2, "WordCandidateListSettings", QLatin1String("Cannot create word candidate list settings")); - - // The minor version used to be the current Qt 5 minor. For compatibility it is the last - // Qt 5 release. - qmlRegisterModule(uri, 2, 15); -} - -QT_END_NAMESPACE diff --git a/src/settings/qtquickvirtualkeyboardsettingsplugin.h b/src/settings/qtquickvirtualkeyboardsettingsplugin.h deleted file mode 100644 index 355a2d66..00000000 --- a/src/settings/qtquickvirtualkeyboardsettingsplugin.h +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTQUICKVIRTUALKEYBOARDSETTINGSPLUGIN_H -#define QTQUICKVIRTUALKEYBOARDSETTINGSPLUGIN_H - -#include <QQmlExtensionPlugin> - -QT_BEGIN_NAMESPACE - -class QtQuickVirtualKeyboardSettingsPlugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickVirtualKeyboardSettingsPlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) { } - void registerTypes(const char *uri) override; -}; - -QT_END_NAMESPACE - -#endif // QTQUICKVIRTUALKEYBOARDSETTINGSPLUGIN_H - diff --git a/src/settings/settings.pro b/src/settings/settings.pro deleted file mode 100644 index c4d97c16..00000000 --- a/src/settings/settings.pro +++ /dev/null @@ -1,23 +0,0 @@ -TARGET = qtquickvirtualkeyboardsettingsplugin -TARGETPATH = QtQuick/VirtualKeyboard/Settings -IMPORT_VERSION = 2.$$QT_MINOR_VERSION -QT += qml quick virtualkeyboard-private - -CONFIG += no_cxx_module - -SOURCES += \ - qtquickvirtualkeyboardsettingsplugin.cpp - -HEADERS += \ - qtquickvirtualkeyboardsettingsplugin.h - -OTHER_FILES += \ - plugins.qmltypes \ - qmldir - -win32 { - QMAKE_TARGET_PRODUCT = "Qt Virtual Keyboard (Qt $$QT_VERSION)" - QMAKE_TARGET_DESCRIPTION = "Virtual Keyboard for Qt." -} - -load(qml_plugin) |