InputModeKey.qml 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright (C) 2017 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
  3. import QtQuick
  4. import QtQuick.VirtualKeyboard
  5. /*!
  6. \qmltype InputModeKey
  7. \inqmlmodule QtQuick.VirtualKeyboard.Components
  8. \ingroup qmlclass
  9. \ingroup qtvirtualkeyboard-components-qml
  10. \ingroup qtvirtualkeyboard-key-types
  11. \inherits Key
  12. \since QtQuick.VirtualKeyboard 2.3
  13. \brief Input mode key for keyboard layouts.
  14. This key toggles between available \l {QVirtualKeyboardInputEngine::inputModes} {InputEngine.inputModes}.
  15. */
  16. Key {
  17. keyType: QtVirtualKeyboard.KeyType.InputModeKey
  18. key: Qt.Key_Mode_switch
  19. noKeyEvent: true
  20. functionKey: true
  21. highlighted: true
  22. text: InputContext.inputEngine.inputMode < inputModeNameList.length ?
  23. inputModeNameList[InputContext.inputEngine.inputMode] : "ABC"
  24. onClicked: InputContext.inputEngine.inputMode = __nextInputMode(InputContext.inputEngine.inputMode)
  25. keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined
  26. enabled: inputModeCount > 1
  27. /*!
  28. List of input mode names.
  29. The default list contains all known input modes for \l {QVirtualKeyboardInputEngine::inputMode} {InputEngine.inputMode}.
  30. */
  31. property var inputModeNameList: [
  32. "ABC", // InputEngine.InputMode.Latin
  33. "123", // InputEngine.InputMode.Numeric
  34. "123", // InputEngine.InputMode.Dialable
  35. "拼音", // InputEngine.InputMode.Pinyin
  36. "倉頡", // InputEngine.InputMode.Cangjie
  37. "注音", // InputEngine.InputMode.Zhuyin
  38. "한글", // InputEngine.InputMode.Hangul
  39. "かな", // InputEngine.InputMode.Hiragana
  40. "カナ", // InputEngine.InputMode.Katakana
  41. "全角", // InputEngine.InputMode.FullwidthLatin
  42. "ΑΒΓ", // InputEngine.InputMode.Greek
  43. "АБВ", // InputEngine.InputMode.Cyrillic
  44. "\u0623\u200C\u0628\u200C\u062C", // InputEngine.InputMode.Arabic
  45. "\u05D0\u05D1\u05D2", // InputEngine.InputMode.Hebrew
  46. "中文", // InputEngine.InputMode.ChineseHandwriting
  47. "日本語", // InputEngine.InputMode.JapaneseHandwriting
  48. "한국어", // InputEngine.InputMode.KoreanHandwriting
  49. "กขค", // InputEngine.InputMode.Thai
  50. "笔画", // InputEngine.InputMode.Stroke
  51. "ABC", // InputEngine.InputMode.Romaji
  52. "FLK", // InputEngine.InputMode.HiraganaFlick
  53. ]
  54. /*!
  55. List of input modes to toggle.
  56. This property allows to define a custom list of input modes to
  57. toggle.
  58. The default list contains all the available input modes.
  59. */
  60. property var inputModes: InputContext.inputEngine.inputModes
  61. /*!
  62. This read-only property reflects the actual number of input modes
  63. the user can cycle through this key.
  64. */
  65. readonly property int inputModeCount: __inputModes !== undefined ? __inputModes.length : 0
  66. property var __inputModes: __filterInputModes([].concat(InputContext.inputEngine.inputModes), inputModes)
  67. onInputModesChanged: {
  68. // Check that the current input mode is included in our list
  69. if (keyboard.active && InputContext.inputEngine.inputMode !== -1 &&
  70. __inputModes !== undefined && __inputModes.length > 0 &&
  71. __inputModes.indexOf(InputContext.inputEngine.inputMode) === -1)
  72. InputContext.inputEngine.inputMode = __inputModes[0]
  73. }
  74. function __nextInputMode(inputMode) {
  75. if (!enabled)
  76. return inputMode
  77. var inputModeIndex = __inputModes.indexOf(inputMode) + 1
  78. if (inputModeIndex >= __inputModes.length)
  79. inputModeIndex = 0
  80. return __inputModes[inputModeIndex]
  81. }
  82. function __filterInputModes(inputModes, filter) {
  83. for (var i = 0; i < inputModes.length; i++) {
  84. if (filter.indexOf(inputModes[i]) === -1)
  85. inputModes.splice(i, 1)
  86. }
  87. return inputModes
  88. }
  89. }