| 1 | // Copyright (C) 2016 The Qt Company Ltd. |
| 2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
| 3 | |
| 4 | #include "qquickvirtualkeyboardsettings_p.h" |
| 5 | #include <QtVirtualKeyboard/private/settings_p.h> |
| 6 | #include <QtVirtualKeyboard/private/virtualkeyboarddebug_p.h> |
| 7 | #include <QQmlEngine> |
| 8 | #include <QQmlContext> |
| 9 | #include <QFileInfo> |
| 10 | #include <QDir> |
| 11 | #include <QRegularExpression> |
| 12 | #include <QtCore/private/qobject_p.h> |
| 13 | #ifdef QT_VIRTUALKEYBOARD_SOUNDS_ENABLED |
| 14 | #include <QtMultimedia/qaudio.h> |
| 15 | #endif |
| 16 | |
| 17 | QT_BEGIN_NAMESPACE |
| 18 | namespace QtVirtualKeyboard { |
| 19 | |
| 20 | class QQuickVirtualKeyboardSettingsPrivate : public QObjectPrivate |
| 21 | { |
| 22 | Q_DECLARE_PUBLIC(QQuickVirtualKeyboardSettings) |
| 23 | public: |
| 24 | QQuickVirtualKeyboardSettingsPrivate(QQuickVirtualKeyboardSettings *q_ptr, QQmlEngine *engine) : |
| 25 | QObjectPrivate(), |
| 26 | q_ptr(q_ptr), |
| 27 | engine(engine) |
| 28 | {} |
| 29 | |
| 30 | QString buildStylePath(const QString &path, const QString &name) const |
| 31 | { |
| 32 | QString importPath(path + name + QLatin1String("/style.qml" )); |
| 33 | if (!importPath.startsWith(s: QLatin1String("qrc:" ))) { |
| 34 | QUrl url = QUrl::fromLocalFile(localfile: importPath); |
| 35 | importPath = url.toString(); |
| 36 | } |
| 37 | return importPath; |
| 38 | } |
| 39 | |
| 40 | QString buildStyleFilePath(const QString &path, const QString &name) const |
| 41 | { |
| 42 | QString filePath(path); |
| 43 | if (filePath.startsWith(s: QLatin1String("qrc:" ))) |
| 44 | filePath.remove(i: 0, len: 3); |
| 45 | return filePath + name + QLatin1String("/style.qml" ); |
| 46 | } |
| 47 | |
| 48 | QStringList qmlImportPathList() const |
| 49 | { |
| 50 | return engine ? engine->importPathList() : QStringList(); |
| 51 | } |
| 52 | |
| 53 | QString stylePath(const QString &name) const |
| 54 | { |
| 55 | if (name.isEmpty()) |
| 56 | return QString(); |
| 57 | |
| 58 | QStringList stylePathList; |
| 59 | stylePathList << QLatin1String("qrc:/qt-project.org/imports/QtQuick/VirtualKeyboard/Styles/Builtin/" ); |
| 60 | const QStringList importPathList = qmlImportPathList(); |
| 61 | // Add QML import path (Note: the QML base dir is usually the last entry in the list) |
| 62 | for (int i = importPathList.size() - 1; i >= 0; --i) { |
| 63 | const QString stylesPath = importPathList.at(i) |
| 64 | + QLatin1String("/QtQuick/VirtualKeyboard/Styles/" ); |
| 65 | stylePathList += stylesPath; |
| 66 | } |
| 67 | |
| 68 | // Path for backwards compatibility |
| 69 | stylePathList << QLatin1String("qrc:/QtQuick/VirtualKeyboard/content/styles/" ); |
| 70 | |
| 71 | for (const QString &stylePath : std::as_const(t&: stylePathList)) { |
| 72 | QString filePath = buildStyleFilePath(path: stylePath, name); |
| 73 | bool pathExist = false; |
| 74 | pathExist = QFileInfo::exists(file: filePath); |
| 75 | if (pathExist) |
| 76 | return buildStylePath(path: stylePath, name); |
| 77 | } |
| 78 | return QString(); |
| 79 | } |
| 80 | |
| 81 | QQuickVirtualKeyboardSettings *q_ptr; |
| 82 | QQmlEngine *engine; |
| 83 | QQuickWordCandidateListSettings wordCandidateListSettings; |
| 84 | }; |
| 85 | |
| 86 | /*! |
| 87 | \qmlmodule QtQuick.VirtualKeyboard.Settings |
| 88 | \title Qt Quick Virtual Keyboard Settings QML Types |
| 89 | \ingroup qmlmodules |
| 90 | |
| 91 | \brief Provides settings for Qt Virtual Keyboard. |
| 92 | |
| 93 | The QML types can be imported into your application using the following |
| 94 | import statements in your .qml file: |
| 95 | |
| 96 | \qml |
| 97 | import QtQuick.VirtualKeyboard.Settings |
| 98 | \endqml |
| 99 | */ |
| 100 | |
| 101 | /*! |
| 102 | \qmltype VirtualKeyboardSettings |
| 103 | \inqmlmodule QtQuick.VirtualKeyboard.Settings |
| 104 | \ingroup qtvirtualkeyboard-settings-qml |
| 105 | \since QtQuick.VirtualKeyboard 1.2 |
| 106 | \brief Provides settings for virtual keyboard. |
| 107 | |
| 108 | This type provides a VirtualKeyboardSettings singleton instance, |
| 109 | which can be used to configure the virtual keyboard settings. |
| 110 | |
| 111 | Please note that the settings have only effect in the current |
| 112 | application's lifetime, that is, configuration changes are not |
| 113 | permanent. |
| 114 | |
| 115 | For example, to change the keyboard style in application: |
| 116 | |
| 117 | \code |
| 118 | Component.onCompleted: VirtualKeyboardSettings.styleName = "retro" |
| 119 | \endcode |
| 120 | */ |
| 121 | |
| 122 | /*! |
| 123 | \class QtVirtualKeyboard::VirtualKeyboardSettings |
| 124 | \internal |
| 125 | */ |
| 126 | |
| 127 | /*! |
| 128 | \internal |
| 129 | */ |
| 130 | QQuickVirtualKeyboardSettings::QQuickVirtualKeyboardSettings(QQmlEngine *engine, QObject *parent) : |
| 131 | QObject(*new QQuickVirtualKeyboardSettingsPrivate(this, engine), parent) |
| 132 | { |
| 133 | Q_D(QQuickVirtualKeyboardSettings); |
| 134 | Settings *settings = Settings::instance(); |
| 135 | if (settings->styleName().isEmpty()) |
| 136 | resetStyle(); |
| 137 | if (settings->layoutPath().isEmpty()) |
| 138 | resetLayoutPath(); |
| 139 | connect(asender: settings, SIGNAL(styleChanged()), SIGNAL(styleChanged())); |
| 140 | connect(asender: settings, SIGNAL(styleNameChanged()), SIGNAL(styleNameChanged())); |
| 141 | connect(asender: settings, SIGNAL(localeChanged()), SIGNAL(localeChanged())); |
| 142 | connect(asender: settings, SIGNAL(availableLocalesChanged()), SIGNAL(availableLocalesChanged())); |
| 143 | connect(asender: settings, SIGNAL(activeLocalesChanged()), SIGNAL(activeLocalesChanged())); |
| 144 | connect(asender: settings, SIGNAL(layoutPathChanged()), SIGNAL(layoutPathChanged())); |
| 145 | connect(sender: settings, SIGNAL(wclAutoHideDelayChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(autoHideDelayChanged())); |
| 146 | connect(sender: settings, SIGNAL(wclAlwaysVisibleChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(alwaysVisibleChanged())); |
| 147 | connect(sender: settings, SIGNAL(wclAutoCommitWordChanged()), receiver: &d->wordCandidateListSettings, SIGNAL(autoCommitWordChanged())); |
| 148 | connect(asender: settings, SIGNAL(fullScreenModeChanged()), SIGNAL(fullScreenModeChanged())); |
| 149 | connect(asender: settings, SIGNAL(userDataPathChanged()), SIGNAL(userDataPathChanged())); |
| 150 | settings->connect(asender: this, SIGNAL(userDataReset()), SIGNAL(userDataReset())); |
| 151 | connect(asender: settings, SIGNAL(hwrTimeoutForAlphabeticChanged()), SIGNAL(hwrTimeoutForAlphabeticChanged())); |
| 152 | connect(asender: settings, SIGNAL(hwrTimeoutForCjkChanged()), SIGNAL(hwrTimeoutForCjkChanged())); |
| 153 | connect(asender: settings, SIGNAL(inputMethodHintsChanged()), SIGNAL(inputMethodHintsChanged())); |
| 154 | connect(asender: settings, SIGNAL(handwritingModeDisabledChanged()), SIGNAL(handwritingModeDisabledChanged())); |
| 155 | connect(asender: settings, SIGNAL(defaultInputMethodDisabledChanged()), SIGNAL(defaultInputMethodDisabledChanged())); |
| 156 | connect(asender: settings, SIGNAL(defaultDictionaryDisabledChanged()), SIGNAL(defaultDictionaryDisabledChanged())); |
| 157 | connect(asender: settings, SIGNAL(visibleFunctionKeysChanged()), SIGNAL(visibleFunctionKeysChanged())); |
| 158 | connect(sender: settings, signal: &Settings::keySoundVolumeChanged, context: this, slot: &QQuickVirtualKeyboardSettings::keySoundVolumeChanged); |
| 159 | } |
| 160 | |
| 161 | /*! |
| 162 | \internal |
| 163 | */ |
| 164 | QQuickVirtualKeyboardSettings *QQuickVirtualKeyboardSettings::create(QQmlEngine *qmlEngine, QJSEngine *) |
| 165 | { |
| 166 | return new QQuickVirtualKeyboardSettings(qmlEngine); |
| 167 | } |
| 168 | |
| 169 | /*! |
| 170 | \internal |
| 171 | */ |
| 172 | QString QQuickVirtualKeyboardSettings::style() const |
| 173 | { |
| 174 | return Settings::instance()->style(); |
| 175 | } |
| 176 | |
| 177 | /*! |
| 178 | \internal |
| 179 | */ |
| 180 | QString QQuickVirtualKeyboardSettings::styleName() const |
| 181 | { |
| 182 | return Settings::instance()->styleName(); |
| 183 | } |
| 184 | |
| 185 | /*! |
| 186 | \internal |
| 187 | */ |
| 188 | void QQuickVirtualKeyboardSettings::setStyleName(const QString &styleName) |
| 189 | { |
| 190 | Q_D(QQuickVirtualKeyboardSettings); |
| 191 | Settings *settings = Settings::instance(); |
| 192 | QString style = d->stylePath(name: styleName); |
| 193 | if (style.isEmpty()) { |
| 194 | qWarning() << "WARNING: Cannot find style" << styleName << "- fallback:" << settings->styleName(); |
| 195 | return; |
| 196 | } |
| 197 | settings->setStyleName(styleName); |
| 198 | settings->setStyle(style); |
| 199 | } |
| 200 | |
| 201 | /*! |
| 202 | \internal |
| 203 | */ |
| 204 | QUrl QQuickVirtualKeyboardSettings::layoutPath() const |
| 205 | { |
| 206 | return Settings::instance()->layoutPath(); |
| 207 | } |
| 208 | |
| 209 | /*! |
| 210 | \internal |
| 211 | */ |
| 212 | void QQuickVirtualKeyboardSettings::setLayoutPath(const QUrl &layoutPath) |
| 213 | { |
| 214 | Settings *settings = Settings::instance(); |
| 215 | QDir layoutDirectory(layoutPath.toLocalFile()); |
| 216 | if (!layoutDirectory.exists()) { |
| 217 | qWarning() << "WARNING: Cannot find layout path" << layoutPath; |
| 218 | return; |
| 219 | } |
| 220 | settings->setLayoutPath(layoutPath); |
| 221 | } |
| 222 | |
| 223 | void QQuickVirtualKeyboardSettings::resetLayoutPath() |
| 224 | { |
| 225 | Settings *settings = Settings::instance(); |
| 226 | QUrl layoutPath(QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_LAYOUTS_DIR)); |
| 227 | const QString customLayoutPath(QDir::fromNativeSeparators(pathName: qEnvironmentVariable(varName: "QT_VIRTUALKEYBOARD_LAYOUT_PATH" ))); |
| 228 | if (!customLayoutPath.isEmpty()) { |
| 229 | bool found = false; |
| 230 | QDir customLayoutDirectory(customLayoutPath); |
| 231 | if (customLayoutDirectory.exists()) { |
| 232 | found = true; |
| 233 | layoutPath = QUrl::fromLocalFile(localfile: customLayoutPath); |
| 234 | } else { |
| 235 | customLayoutDirectory = QDir(QUrl(customLayoutPath).toLocalFile()); |
| 236 | if (customLayoutDirectory.exists()) { |
| 237 | found = true; |
| 238 | layoutPath = QUrl(customLayoutPath); |
| 239 | } |
| 240 | } |
| 241 | if (!found) { |
| 242 | qWarning() << "WARNING: Cannot assign custom layout path" << customLayoutPath << "- fallback:" << layoutPath; |
| 243 | } |
| 244 | } |
| 245 | settings->setLayoutPath(layoutPath); |
| 246 | } |
| 247 | |
| 248 | QString QQuickVirtualKeyboardSettings::locale() const |
| 249 | { |
| 250 | return Settings::instance()->locale(); |
| 251 | } |
| 252 | |
| 253 | void QQuickVirtualKeyboardSettings::setLocale(const QString &locale) |
| 254 | { |
| 255 | Settings::instance()->setLocale(locale); |
| 256 | } |
| 257 | |
| 258 | QStringList QQuickVirtualKeyboardSettings::availableLocales() const |
| 259 | { |
| 260 | return Settings::instance()->availableLocales(); |
| 261 | } |
| 262 | |
| 263 | void QQuickVirtualKeyboardSettings::setActiveLocales(const QStringList &activeLocales) |
| 264 | { |
| 265 | Settings::instance()->setActiveLocales(activeLocales); |
| 266 | } |
| 267 | |
| 268 | QStringList QQuickVirtualKeyboardSettings::activeLocales() const |
| 269 | { |
| 270 | return Settings::instance()->activeLocales(); |
| 271 | } |
| 272 | |
| 273 | QQuickWordCandidateListSettings *QQuickVirtualKeyboardSettings::wordCandidateList() const |
| 274 | { |
| 275 | Q_D(const QQuickVirtualKeyboardSettings); |
| 276 | return const_cast<QQuickWordCandidateListSettings *>(&d->wordCandidateListSettings); |
| 277 | } |
| 278 | |
| 279 | bool QQuickVirtualKeyboardSettings::fullScreenMode() const |
| 280 | { |
| 281 | return Settings::instance()->fullScreenMode(); |
| 282 | } |
| 283 | |
| 284 | void QQuickVirtualKeyboardSettings::setFullScreenMode(bool fullScreenMode) |
| 285 | { |
| 286 | return Settings::instance()->setFullScreenMode(fullScreenMode); |
| 287 | } |
| 288 | |
| 289 | QString QQuickVirtualKeyboardSettings::userDataPath() const |
| 290 | { |
| 291 | return Settings::instance()->userDataPath(); |
| 292 | } |
| 293 | |
| 294 | void QQuickVirtualKeyboardSettings::setUserDataPath(const QString &userDataPath) |
| 295 | { |
| 296 | return Settings::instance()->setUserDataPath(userDataPath); |
| 297 | } |
| 298 | |
| 299 | int QQuickVirtualKeyboardSettings::hwrTimeoutForAlphabetic() const |
| 300 | { |
| 301 | return Settings::instance()->hwrTimeoutForAlphabetic(); |
| 302 | } |
| 303 | |
| 304 | void QQuickVirtualKeyboardSettings::setHwrTimeoutForAlphabetic(int hwrTimeoutForAlphabetic) |
| 305 | { |
| 306 | return Settings::instance()->setHwrTimeoutForAlphabetic(hwrTimeoutForAlphabetic); |
| 307 | } |
| 308 | |
| 309 | int QQuickVirtualKeyboardSettings::hwrTimeoutForCjk() const |
| 310 | { |
| 311 | return Settings::instance()->hwrTimeoutForCjk(); |
| 312 | } |
| 313 | |
| 314 | void QQuickVirtualKeyboardSettings::setHwrTimeoutForCjk(int hwrTimeoutForCjk) |
| 315 | { |
| 316 | return Settings::instance()->setHwrTimeoutForCjk(hwrTimeoutForCjk); |
| 317 | } |
| 318 | |
| 319 | Qt::InputMethodHints QQuickVirtualKeyboardSettings::inputMethodHints() const |
| 320 | { |
| 321 | return Settings::instance()->inputMethodHints(); |
| 322 | } |
| 323 | |
| 324 | void QQuickVirtualKeyboardSettings::setInputMethodHints(const Qt::InputMethodHints &inputMethodHints) |
| 325 | { |
| 326 | Settings::instance()->setInputMethodHints(inputMethodHints); |
| 327 | } |
| 328 | |
| 329 | bool QQuickVirtualKeyboardSettings::isHandwritingModeDisabled() const |
| 330 | { |
| 331 | return Settings::instance()->isHandwritingModeDisabled(); |
| 332 | } |
| 333 | |
| 334 | void QQuickVirtualKeyboardSettings::setHandwritingModeDisabled(bool handwritingModeDisabled) |
| 335 | { |
| 336 | Settings::instance()->setHandwritingModeDisabled(handwritingModeDisabled); |
| 337 | } |
| 338 | |
| 339 | bool QQuickVirtualKeyboardSettings::isDefaultInputMethodDisabled() const |
| 340 | { |
| 341 | return Settings::instance()->isDefaultInputMethodDisabled(); |
| 342 | } |
| 343 | |
| 344 | void QQuickVirtualKeyboardSettings::setDefaultInputMethodDisabled(bool defaultInputMethodDisabled) |
| 345 | { |
| 346 | return Settings::instance()->setDefaultInputMethodDisabled(defaultInputMethodDisabled); |
| 347 | } |
| 348 | |
| 349 | bool QQuickVirtualKeyboardSettings::isDefaultDictionaryDisabled() const |
| 350 | { |
| 351 | return Settings::instance()->isDefaultDictionaryDisabled(); |
| 352 | } |
| 353 | |
| 354 | void QQuickVirtualKeyboardSettings::setDefaultDictionaryDisabled(bool defaultDictionaryDisabled) |
| 355 | { |
| 356 | return Settings::instance()->setDefaultDictionaryDisabled(defaultDictionaryDisabled); |
| 357 | } |
| 358 | |
| 359 | QtVirtualKeyboard::KeyboardFunctionKeys QQuickVirtualKeyboardSettings::visibleFunctionKeys() const |
| 360 | { |
| 361 | return Settings::instance()->visibleFunctionKeys(); |
| 362 | } |
| 363 | |
| 364 | void QQuickVirtualKeyboardSettings::setVisibleFunctionKeys(QtVirtualKeyboard::KeyboardFunctionKeys newVisibleFunctionKeys) |
| 365 | { |
| 366 | Settings::instance()->setVisibleFunctionKeys(newVisibleFunctionKeys); |
| 367 | } |
| 368 | |
| 369 | bool QQuickVirtualKeyboardSettings::closeOnReturn() const |
| 370 | { |
| 371 | return Settings::instance()->closeOnReturn(); |
| 372 | } |
| 373 | |
| 374 | void QQuickVirtualKeyboardSettings::setCloseOnReturn(bool closeOnReturn) |
| 375 | { |
| 376 | Settings::instance()->setCloseOnReturn(closeOnReturn); |
| 377 | } |
| 378 | |
| 379 | qreal QQuickVirtualKeyboardSettings::keySoundVolume() const |
| 380 | { |
| 381 | return Settings::instance()->keySoundVolume(); |
| 382 | } |
| 383 | |
| 384 | void QQuickVirtualKeyboardSettings::setKeySoundVolume(qreal volume) |
| 385 | { |
| 386 | Settings::instance()->setKeySoundVolume(volume); |
| 387 | } |
| 388 | |
| 389 | /*! |
| 390 | \internal |
| 391 | */ |
| 392 | qreal QQuickVirtualKeyboardSettings::convertVolume(qreal volume) const |
| 393 | { |
| 394 | #ifdef QT_VIRTUALKEYBOARD_SOUNDS_ENABLED |
| 395 | qreal linearVolume = QAudio::convertVolume(volume: volume / 100, |
| 396 | from: QtAudio::LogarithmicVolumeScale, |
| 397 | to: QtAudio::LinearVolumeScale); |
| 398 | return linearVolume; |
| 399 | #else |
| 400 | qWarning("No QtMultimedia" ); |
| 401 | return volume; |
| 402 | #endif |
| 403 | } |
| 404 | |
| 405 | void QQuickVirtualKeyboardSettings::resetStyle() |
| 406 | { |
| 407 | Q_D(QQuickVirtualKeyboardSettings); |
| 408 | Settings *settings = Settings::instance(); |
| 409 | QString styleName = QLatin1String(QT_VIRTUALKEYBOARD_DEFAULT_STYLE); |
| 410 | QString style = d->stylePath(name: styleName); |
| 411 | QString customStyleName = QString::fromLatin1(ba: qgetenv(varName: "QT_VIRTUALKEYBOARD_STYLE" )); |
| 412 | if (!customStyleName.isEmpty()) { |
| 413 | bool found = false; |
| 414 | QRegularExpression styleNameValidator(QLatin1String("\\A(?:\\w+)\\z" )); |
| 415 | QRegularExpressionMatch match = styleNameValidator.match(subject: customStyleName); |
| 416 | if (match.hasMatch()) { |
| 417 | QString customStyle = d->stylePath(name: customStyleName); |
| 418 | if (!customStyle.isEmpty()) { |
| 419 | styleName = customStyleName; |
| 420 | style = customStyle; |
| 421 | found = true; |
| 422 | } |
| 423 | } |
| 424 | if (!found) { |
| 425 | qWarning() << "WARNING: Cannot find style" << customStyleName << "- fallback:" << styleName; |
| 426 | } |
| 427 | } |
| 428 | if (!style.isEmpty()) { |
| 429 | settings->setStyleName(styleName); |
| 430 | settings->setStyle(style); |
| 431 | } |
| 432 | } |
| 433 | |
| 434 | /*! |
| 435 | \qmlproperty string VirtualKeyboardSettings::style |
| 436 | \internal |
| 437 | */ |
| 438 | |
| 439 | /*! |
| 440 | \qmlproperty string VirtualKeyboardSettings::styleName |
| 441 | |
| 442 | This property provides the current style. Application can change |
| 443 | the keyboard style by setting the styleName to different value. |
| 444 | |
| 445 | The system wide keyboard style can be affected by setting |
| 446 | the QT_VIRTUALKEYBOARD_STYLE environment variable. |
| 447 | */ |
| 448 | |
| 449 | /*! |
| 450 | \qmlproperty string VirtualKeyboardSettings::locale |
| 451 | \since QtQuick.VirtualKeyboard.Settings 2.0 |
| 452 | |
| 453 | This property provides the default locale for the keyboard. |
| 454 | |
| 455 | When the locale is not specified, the default system locale is used instead. |
| 456 | |
| 457 | If the keyboard locale is different from the new default locale, keyboard |
| 458 | language is changed immediately to reflect the new locale. If the locale setting |
| 459 | is incorrect, or it is not in the list of supported locales, it is ignored and |
| 460 | the default setting is used instead. |
| 461 | |
| 462 | A locale is supported if it is included in the list of availableLocales. |
| 463 | */ |
| 464 | |
| 465 | /*! |
| 466 | \qmlproperty list<string> VirtualKeyboardSettings::availableLocales |
| 467 | \since QtQuick.VirtualKeyboard.Settings 2.0 |
| 468 | \readonly |
| 469 | |
| 470 | This property contains a list of languages supported by the virtual keyboard. |
| 471 | |
| 472 | This list is read-only and depends on the build-time configuration of the |
| 473 | virtual keyboard. |
| 474 | */ |
| 475 | |
| 476 | /*! |
| 477 | \qmlproperty list<string> VirtualKeyboardSettings::activeLocales |
| 478 | \since QtQuick.VirtualKeyboard.Settings 2.0 |
| 479 | |
| 480 | This property contains a list of activated languages of the virtual keyboard. |
| 481 | |
| 482 | The list of active languages is a subset of the available languages, and can be |
| 483 | used to limit the list of available languages in the application lifetime. |
| 484 | |
| 485 | The list of languages will be shown based on the specified ordering. |
| 486 | */ |
| 487 | |
| 488 | /*! |
| 489 | \qmlproperty bool VirtualKeyboardSettings::fullScreenMode |
| 490 | \since QtQuick.VirtualKeyboard.Settings 2.2 |
| 491 | |
| 492 | This property enables the fullscreen mode for the virtual keyboard. |
| 493 | |
| 494 | In fullscreen mode, the virtual keyboard replicates the contents of the |
| 495 | focused input field to the fullscreen input field located at the top of the |
| 496 | keyboard. |
| 497 | |
| 498 | For example, to activate the fullscreen mode when the screen aspect ratio |
| 499 | is greater than 16:9: |
| 500 | |
| 501 | \code |
| 502 | Binding { |
| 503 | target: VirtualKeyboardSettings |
| 504 | property: "fullScreenMode" |
| 505 | value: (Screen.width / Screen.height) > (16.0 / 9.0) |
| 506 | } |
| 507 | \endcode |
| 508 | */ |
| 509 | |
| 510 | /*! |
| 511 | \qmlproperty bool VirtualKeyboardSettings::userDataPath |
| 512 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 513 | |
| 514 | This property sets the user data path for the virtual keyboard and its plugins. |
| 515 | |
| 516 | By default, the user data path is set to \l {QStandardPaths::GenericConfigLocation}{GenericConfigLocation} + "/qtvirtualkeyboard". |
| 517 | */ |
| 518 | |
| 519 | /*! |
| 520 | \qmlsignal VirtualKeyboardSettings::userDataReset() |
| 521 | |
| 522 | The application triggers this signal prior to the user's data being reset to |
| 523 | indicate to the virtual keyboard that all files must be closed |
| 524 | in the user data directory. |
| 525 | */ |
| 526 | |
| 527 | /*! |
| 528 | \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForAlphabetic |
| 529 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 530 | |
| 531 | This property sets the handwriting recognition timeout for alphabetical languages. |
| 532 | |
| 533 | By default, the timeout is 500 millliseconds. |
| 534 | */ |
| 535 | |
| 536 | /*! |
| 537 | \qmlproperty bool VirtualKeyboardSettings::hwrTimeoutForCjk |
| 538 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 539 | |
| 540 | This property sets the handwriting recognition timeout for Chinese / Japanese / Korean languages. |
| 541 | |
| 542 | By default, the timeout is 500 millliseconds. |
| 543 | */ |
| 544 | |
| 545 | /*! |
| 546 | \qmlproperty int VirtualKeyboardSettings::inputMethodHints |
| 547 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 548 | |
| 549 | This property allows to set persistent input method hints. |
| 550 | |
| 551 | The value of this property is combined with the input method |
| 552 | hints from the input control. For example, to disable predictive |
| 553 | text input, this property can be set to \c Qt::ImhNoPredictiveText. |
| 554 | */ |
| 555 | |
| 556 | /*! |
| 557 | \qmlproperty bool VirtualKeyboardSettings::handwritingModeDisabled |
| 558 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 559 | |
| 560 | This property allows to disable handwriting input mode, if it is |
| 561 | otherwise available in the system. |
| 562 | |
| 563 | When this property is set to \c true, the handwriting button is hidden |
| 564 | from the keyboard layout and the user cannot switch to handwriting |
| 565 | input mode. |
| 566 | */ |
| 567 | |
| 568 | /*! |
| 569 | \qmlproperty bool VirtualKeyboardSettings::defaultInputMethodDisabled |
| 570 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 571 | |
| 572 | This property disables the default input method. The purpose of this setting is to be able to |
| 573 | override the default input method with the plain input method, disabling its functionality. |
| 574 | */ |
| 575 | |
| 576 | /*! |
| 577 | \qmlproperty bool VirtualKeyboardSettings::defaultDictionaryDisabled |
| 578 | \since QtQuick.VirtualKeyboard.Settings 6.1 |
| 579 | |
| 580 | This property disables the default dictionary. The purpose of this setting is to be able to |
| 581 | use a custom dictionary only instead of the standard dictionary. |
| 582 | */ |
| 583 | |
| 584 | /*! |
| 585 | \qmlproperty enumeration VirtualKeyboardSettings::visibleFunctionKeys |
| 586 | \since QtQuick.VirtualKeyboard.Settings 6.6 |
| 587 | |
| 588 | This setting adjusts the visibility of specific function keys in the keyboard layout, allowing |
| 589 | them to be either displayed or hidden. When a function key is not visible, its functionality |
| 590 | remains accessible through the gear menu. |
| 591 | |
| 592 | The value can be combination of the following flags: |
| 593 | |
| 594 | \list |
| 595 | \li \c QtVirtualKeyboard.KeyboardFunctionKeys.None All function keys are hidden |
| 596 | \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Hide Hide function key is visible |
| 597 | \li \c QtVirtualKeyboard.KeyboardFunctionKeys.Language Language function key is visible |
| 598 | \li \c QtVirtualKeyboard.KeyboardFunctionKeys.All All function keys are visible |
| 599 | \endlist |
| 600 | |
| 601 | The default is \c QtVirtualKeyboard.KeyboardFunctionKeys.All. |
| 602 | */ |
| 603 | |
| 604 | /*! |
| 605 | \qmlproperty bool VirtualKeyboardSettings::closeOnReturn |
| 606 | \since QtQuick.VirtualKeyboard.Settings 6.8 |
| 607 | |
| 608 | This property enables hiding of virtual keyboard. |
| 609 | |
| 610 | When this property is set to \c true, the virtual keyboard is hidden when \l Qt::Key_Enter |
| 611 | or \l Qt::Key_Return key released. The default is \c false. |
| 612 | */ |
| 613 | |
| 614 | /*! |
| 615 | \qmlproperty real VirtualKeyboardSettings::keySoundVolume |
| 616 | \since QtQuick.VirtualKeyboard.Settings 6.9 |
| 617 | |
| 618 | This property holds the keysound's volume level. The level is in the range [0,1] |
| 619 | */ |
| 620 | |
| 621 | /*! |
| 622 | \since QtQuick.VirtualKeyboard.Settings 2.2 |
| 623 | \qmlproperty int VirtualKeyboardSettings::wordCandidateList.autoHideDelay |
| 624 | \qmlproperty bool VirtualKeyboardSettings::wordCandidateList.alwaysVisible |
| 625 | |
| 626 | \table |
| 627 | \header |
| 628 | \li Name |
| 629 | \li Description |
| 630 | \row |
| 631 | \li autoHideDelay |
| 632 | \li This property defines the delay, in milliseconds, after which the |
| 633 | word candidate list is hidden if empty. |
| 634 | |
| 635 | If the value is \c 0, the list is immediately hidden when cleared. |
| 636 | |
| 637 | If the value is \c -1, the list is visible until input focus |
| 638 | changes, or the input panel is hidden. |
| 639 | |
| 640 | The default value is \c 5000 milliseconds. |
| 641 | \row |
| 642 | \li alwaysVisible |
| 643 | \li This property defines whether the word candidate list should always |
| 644 | remain visible. |
| 645 | |
| 646 | The default value is \c false. |
| 647 | \row |
| 648 | \li autoCommitWord |
| 649 | \li This property enables the automatic commit feature that is activated |
| 650 | when the word candidate list is narrowed down to a single candidate. |
| 651 | |
| 652 | The automatic commit feature takes effect when the word candidate |
| 653 | list initially contains multiple words and is reduced to single word |
| 654 | after additional input. This word will be selected and committed |
| 655 | automatically without user interaction. |
| 656 | |
| 657 | This property is set to \c false by default. |
| 658 | \endtable |
| 659 | */ |
| 660 | |
| 661 | QQuickWordCandidateListSettings::QQuickWordCandidateListSettings(QObject *parent) : |
| 662 | QObject(parent) |
| 663 | { |
| 664 | } |
| 665 | |
| 666 | int QQuickWordCandidateListSettings::autoHideDelay() const |
| 667 | { |
| 668 | return Settings::instance()->wclAutoHideDelay(); |
| 669 | } |
| 670 | |
| 671 | void QQuickWordCandidateListSettings::setAutoHideDelay(int autoHideDelay) |
| 672 | { |
| 673 | Settings::instance()->setWclAutoHideDelay(autoHideDelay); |
| 674 | } |
| 675 | |
| 676 | bool QQuickWordCandidateListSettings::alwaysVisible() const |
| 677 | { |
| 678 | return Settings::instance()->wclAlwaysVisible(); |
| 679 | } |
| 680 | |
| 681 | void QQuickWordCandidateListSettings::setAlwaysVisible(bool alwaysVisible) |
| 682 | { |
| 683 | Settings::instance()->setWclAlwaysVisible(alwaysVisible); |
| 684 | } |
| 685 | |
| 686 | bool QQuickWordCandidateListSettings::autoCommitWord() const |
| 687 | { |
| 688 | return Settings::instance()->wclAutoCommitWord(); |
| 689 | } |
| 690 | |
| 691 | void QQuickWordCandidateListSettings::setAutoCommitWord(bool autoCommitWord) |
| 692 | { |
| 693 | Settings::instance()->setWclAutoCommitWord(autoCommitWord); |
| 694 | } |
| 695 | |
| 696 | } // namespace QtVirtualKeyboard |
| 697 | QT_END_NAMESPACE |
| 698 | |