aboutsummaryrefslogtreecommitdiffstats
path: root/src/layouts/zh_TW
diff options
context:
space:
mode:
Diffstat (limited to 'src/layouts/zh_TW')
-rw-r--r--src/layouts/zh_TW/dialpad.fallback0
-rw-r--r--src/layouts/zh_TW/digits.fallback0
-rw-r--r--src/layouts/zh_TW/handwriting.qml73
-rw-r--r--src/layouts/zh_TW/main.qml459
-rw-r--r--src/layouts/zh_TW/numbers.fallback0
-rw-r--r--src/layouts/zh_TW/symbols.qml476
6 files changed, 1008 insertions, 0 deletions
diff --git a/src/layouts/zh_TW/dialpad.fallback b/src/layouts/zh_TW/dialpad.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/dialpad.fallback
diff --git a/src/layouts/zh_TW/digits.fallback b/src/layouts/zh_TW/digits.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/digits.fallback
diff --git a/src/layouts/zh_TW/handwriting.qml b/src/layouts/zh_TW/handwriting.qml
new file mode 100644
index 00000000..a2548b89
--- /dev/null
+++ b/src/layouts/zh_TW/handwriting.qml
@@ -0,0 +1,73 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayout {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; HandwritingInputMethod {}', parent)
+ }
+ sharedLayouts: ['symbols']
+ inputMode: preferredInputMode()
+
+ Connections {
+ target: InputContext
+ function onInputMethodHintsChanged() {
+ var newInputMode = preferredInputMode()
+ if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1)
+ InputContext.inputEngine.inputMode = newInputMode
+ }
+ }
+
+ function preferredInputMode() {
+ return InputContext.inputMethodHints &
+ (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly |
+ Qt.ImhLatinOnly) ? InputEngine.InputMode.Latin : InputEngine.InputMode.ChineseHandwriting
+ }
+
+ KeyboardRow {
+ KeyboardColumn {
+ Layout.preferredWidth: 1
+ InputModeKey {
+ }
+ ChangeLanguageKey {
+ visible: true
+ }
+ ShiftKey {
+ }
+ HandwritingModeKey {
+ }
+ }
+ KeyboardColumn {
+ Layout.preferredWidth: 8
+ TraceInputKey {
+ objectName: "hwrInputArea"
+ patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
+ horizontalRulers:
+ InputContext.inputEngine.inputMode !== InputEngine.InputMode.ChineseHandwriting ? [] :
+ [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3]
+ }
+ }
+ KeyboardColumn {
+ Layout.preferredWidth: 1
+ Key {
+ key: Qt.Key_Period
+ text: "。"
+ alternativeKeys: "¥‘’“”~…—\",.:;、。?! "
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ HideKeyboardKey {
+ visible: true
+ }
+ BackspaceKey {
+ }
+ EnterKey {
+ }
+ }
+ }
+}
diff --git a/src/layouts/zh_TW/main.qml b/src/layouts/zh_TW/main.qml
new file mode 100644
index 00000000..65c481c6
--- /dev/null
+++ b/src/layouts/zh_TW/main.qml
@@ -0,0 +1,459 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; TCInputMethod {}', parent, "main.qml")
+ }
+ sharedLayouts: ['symbols']
+ sourceComponent: {
+ switch (InputContext.inputEngine.inputMode) {
+ case InputEngine.InputMode.Cangjie:
+ return pageCangjie
+ case InputEngine.InputMode.Zhuyin:
+ return pageZhuyin
+ default:
+ return null
+ }
+ }
+ Component {
+ id: pageCangjie
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ smallTextVisible: true
+ KeyboardRow {
+ Key {
+ text: "\u624B"
+ alternativeKeys: "\u624Bq"
+ }
+ Key {
+ id: normalKey
+ text: "\u7530"
+ alternativeKeys: "\u7530w"
+ }
+ Key {
+ text: "\u6C34"
+ alternativeKeys: "\u6C34e"
+ }
+ Key {
+ text: "\u53E3"
+ alternativeKeys: "\u53E3r"
+ }
+ Key {
+ text: "\u5EFF"
+ alternativeKeys: "\u5EFFt"
+ }
+ Key {
+ text: "\u535C"
+ alternativeKeys: "\u535Cy"
+ }
+ Key {
+ text: "\u5C71"
+ alternativeKeys: "\u5C71u"
+ }
+ Key {
+ text: "\u6208"
+ alternativeKeys: "\u6208i"
+ }
+ Key {
+ text: "\u4EBA"
+ alternativeKeys: "\u4EBAo"
+ }
+ Key {
+ text: "\u5FC3"
+ alternativeKeys: "\u5FC3p"
+ }
+ }
+ KeyboardRow {
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ FillerKey {
+ }
+ Key {
+ text: "\u65E5"
+ alternativeKeys: "\u65E5a"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ Key {
+ text: "\u5C38"
+ alternativeKeys: "\u5C38s"
+ }
+ Key {
+ text: "\u6728"
+ alternativeKeys: "\u6728d"
+ }
+ Key {
+ text: "\u706B"
+ alternativeKeys: "\u706Bf"
+ }
+ Key {
+ text: "\u571F"
+ alternativeKeys: "\u571Fg"
+ }
+ Key {
+ text: "\u7AF9"
+ alternativeKeys: "\u7AF9h"
+ }
+ Key {
+ text: "\u5341"
+ alternativeKeys: "\u5341j"
+ }
+ Key {
+ text: "\u5927"
+ alternativeKeys: "\u5927k"
+ }
+ KeyboardRow {
+ Layout.preferredWidth: functionKeyWidth
+ Layout.fillWidth: false
+ Key {
+ text: "\u4E2D"
+ alternativeKeys: "\u4E2Dl"
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ FillerKey {
+ }
+ }
+ }
+ KeyboardRow {
+ ModeKey {
+ id: simplifiedModeKey
+ key: Qt.Key_Mode_switch
+ displayText: "速成"
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ Component.onCompleted: updateBinding()
+ Connections {
+ target: InputContext.inputEngine
+ function onInputMethodChanged() { simplifiedModeKey.updateBinding() }
+ }
+ function updateBinding() {
+ if (InputContext.inputEngine.inputMethod && InputContext.inputEngine.inputMethod.hasOwnProperty("simplified")) {
+ simplifiedModeKey.mode = InputContext.inputEngine.inputMethod.simplified
+ InputContext.inputEngine.inputMethod.simplified = Qt.binding(function() { return simplifiedModeKey.mode })
+ }
+ }
+ }
+ Key {
+ text: "\u91CD"
+ alternativeKeys: "\u91CDz"
+ }
+ Key {
+ text: "\u96E3"
+ alternativeKeys: "\u96E3x"
+ }
+ Key {
+ text: "\u91D1"
+ alternativeKeys: "\u91D1c"
+ }
+ Key {
+ text: "\u5973"
+ alternativeKeys: "\u5973v"
+ }
+ Key {
+ text: "\u6708"
+ alternativeKeys: "\u6708b"
+ }
+ Key {
+ text: "\u5F13"
+ alternativeKeys: "\u5F13n"
+ }
+ Key {
+ text: "\u4E00"
+ alternativeKeys: "\u4E00m"
+ }
+ BackspaceKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ ChangeLanguageKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0C"
+ smallText: "\u2699"
+ smallTextVisible: keyboard.isFunctionPopupListAvailable()
+ highlighted: true
+ }
+ InputModeKey {
+ visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.InputMode.Zhuyin) !== -1
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0E"
+ alternativeKeys: "\uFF1B\u3001\uFF0E\uFF1A\u3002?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ HideKeyboardKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: pageZhuyin
+ KeyboardLayout {
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ smallTextVisible: true
+ KeyboardRow {
+ Layout.preferredHeight: 3
+ KeyboardColumn {
+ KeyboardRow {
+ Key {
+ text: "\u3105"
+ alternativeKeys: "\u31051"
+ }
+ Key {
+ id: normalKey
+ text: "\u3109"
+ alternativeKeys: "\u31092"
+ }
+ Key {
+ text: "\u02C7"
+ alternativeKeys: "\u02C73"
+ }
+ Key {
+ text: "\u02CB"
+ alternativeKeys: "\u02CB4"
+ displayText: "`"
+ }
+ Key {
+ text: "\u3113"
+ alternativeKeys: "\u31135"
+ }
+ Key {
+ text: "\u02CA"
+ alternativeKeys: "\u02CA6"
+ displayText: "´"
+ }
+ Key {
+ text: "\u02D9"
+ alternativeKeys: "\u02D97"
+ }
+ Key {
+ text: "\u311A"
+ alternativeKeys: "\u311A8"
+ }
+ Key {
+ text: "\u311E"
+ alternativeKeys: "\u311E9"
+ }
+ Key {
+ text: "\u3122"
+ alternativeKeys: "\u31220"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3106"
+ alternativeKeys: "\u3106q"
+ }
+ Key {
+ text: "\u310A"
+ alternativeKeys: "\u310Aw"
+ }
+ Key {
+ text: "\u310D"
+ alternativeKeys: "\u310De"
+ }
+ Key {
+ text: "\u3110"
+ alternativeKeys: "\u3110r"
+ }
+ Key {
+ text: "\u3114"
+ alternativeKeys: "\u3114t"
+ }
+ Key {
+ text: "\u3117"
+ alternativeKeys: "\u3117y"
+ }
+ Key {
+ text: "\u3127"
+ alternativeKeys: "\u3127u"
+ }
+ Key {
+ text: "\u311B"
+ alternativeKeys: "\u311Bi"
+ }
+ Key {
+ text: "\u311F"
+ alternativeKeys: "\u311Fo"
+ }
+ Key {
+ text: "\u3123"
+ alternativeKeys: "\u3123p"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3107"
+ alternativeKeys: "\u3107a"
+ }
+ Key {
+ text: "\u310B"
+ alternativeKeys: "\u310Bs"
+ }
+ Key {
+ text: "\u310E"
+ alternativeKeys: "\u310Ed"
+ }
+ Key {
+ text: "\u3111"
+ alternativeKeys: "\u3111f"
+ }
+ Key {
+ text: "\u3115"
+ alternativeKeys: "\u3115g"
+ }
+ Key {
+ text: "\u3118"
+ alternativeKeys: "\u3118h"
+ }
+ Key {
+ text: "\u3128"
+ alternativeKeys: "\u3128j"
+ }
+ Key {
+ text: "\u311C"
+ alternativeKeys: "\u311Ck"
+ }
+ Key {
+ text: "\u3120"
+ alternativeKeys: "\u3120l"
+ }
+ Key {
+ text: "\u3124"
+ alternativeKeys: "\u3124…"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "\u3108"
+ alternativeKeys: "\u3108z"
+ }
+ Key {
+ text: "\u310C"
+ alternativeKeys: "\u310Cx"
+ }
+ Key {
+ text: "\u310F"
+ alternativeKeys: "\u310Fc"
+ }
+ Key {
+ text: "\u3112"
+ alternativeKeys: "\u3112v"
+ }
+ Key {
+ text: "\u3116"
+ alternativeKeys: "\u3116b"
+ }
+ Key {
+ text: "\u3119"
+ alternativeKeys: "\u3119n"
+ }
+ Key {
+ text: "\u3129"
+ alternativeKeys: "\u3129m"
+ }
+ Key {
+ text: "\u311D"
+ alternativeKeys: "、\u311D,"
+ }
+ Key {
+ text: "\u3121"
+ alternativeKeys: "。\u3121."
+ }
+ Key {
+ text: "\u3125"
+ alternativeKeys: ";:\u3125\u3126"
+ }
+ }
+ }
+ }
+ KeyboardRow {
+ id: bottomRow
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ ChangeLanguageKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0C"
+ smallText: "\u2699"
+ smallTextVisible: keyboard.isFunctionPopupListAvailable()
+ highlighted: true
+ }
+ InputModeKey {
+ visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.InputMode.Zhuyin) !== -1
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "\uFF0E"
+ alternativeKeys: "\uFF1B\u3001\uFF0E\uFF1A\u3002?!"
+ smallText: "!?"
+ smallTextVisible: true
+ highlighted: true
+ }
+ BackspaceKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ HideKeyboardKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}
diff --git a/src/layouts/zh_TW/numbers.fallback b/src/layouts/zh_TW/numbers.fallback
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/layouts/zh_TW/numbers.fallback
diff --git a/src/layouts/zh_TW/symbols.qml b/src/layouts/zh_TW/symbols.qml
new file mode 100644
index 00000000..9c8dc995
--- /dev/null
+++ b/src/layouts/zh_TW/symbols.qml
@@ -0,0 +1,476 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.VirtualKeyboard
+import QtQuick.VirtualKeyboard.Components
+
+KeyboardLayoutLoader {
+ function createInputMethod() {
+ return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; TCInputMethod {}', parent, "symbols.qml")
+ }
+ sharedLayouts: ['main']
+ property int page
+ readonly property int numPages: 3
+ sourceComponent: {
+ switch (page) {
+ case 2: return page3
+ case 1: return page2
+ default: return page1
+ }
+ }
+ Component {
+ id: page1
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "1"
+ }
+ Key {
+ id: normalKey
+ key: Qt.Key_2
+ text: "2"
+ }
+ Key {
+ key: Qt.Key_3
+ text: "3"
+ }
+ Key {
+ key: Qt.Key_4
+ text: "4"
+ }
+ Key {
+ key: Qt.Key_5
+ text: "5"
+ }
+ Key {
+ key: Qt.Key_6
+ text: "6"
+ }
+ Key {
+ key: Qt.Key_7
+ text: "7"
+ }
+ Key {
+ key: Qt.Key_8
+ text: "8"
+ }
+ Key {
+ key: Qt.Key_9
+ text: "9"
+ }
+ Key {
+ key: Qt.Key_0
+ text: "0"
+ }
+ }
+ KeyboardRow {
+ Key {
+ key: Qt.Key_1
+ text: "@"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "#"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "%"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "&"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "*"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "_"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "-"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "+"
+ }
+ Key {
+ key: Qt.Key_1
+ text: "("
+ }
+ Key {
+ key: Qt.Key_1
+ text: ")"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "“"
+ }
+ Key {
+ text: "”"
+ }
+ Key {
+ text: "、"
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "~"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ ChangeLanguageKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: keyboard.isFunctionPopupListAvailable()
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "—"
+ highlighted: true
+ }
+ HideKeyboardKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page2
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "½"
+ alternativeKeys: "½¼¾"
+ }
+ Key {
+ id: normalKey
+ text: "'"
+ }
+ Key {
+ text: "/"
+ }
+ Key {
+ text: "\\"
+ }
+ Key {
+ text: "|"
+ }
+ Key {
+ text: "["
+ }
+ Key {
+ text: "]"
+ }
+ Key {
+ text: "{"
+ }
+ Key {
+ text: "}"
+ }
+ Key {
+ text: "·"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "<"
+ }
+ Key {
+ text: ">"
+ }
+ Key {
+ text: ","
+ }
+ Key {
+ text: "."
+ }
+ Key {
+ text: ":"
+ }
+ Key {
+ text: ";"
+ }
+ Key {
+ text: "!"
+ }
+ Key {
+ text: "?"
+ }
+ Key {
+ text: "="
+ }
+ Key {
+ text: "~"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "\""
+ }
+ Key {
+ text: "§"
+ }
+ Key {
+ text: "^"
+ }
+ Key {
+ text: "$"
+ }
+ Key {
+ text: "¥"
+ }
+ Key {
+ text: "€"
+ }
+ Key {
+ text: "£"
+ }
+ Key {
+ text: "¢"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ ChangeLanguageKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: keyboard.isFunctionPopupListAvailable()
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "。"
+ highlighted: true
+ }
+ HideKeyboardKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+ Component {
+ id: page3
+ KeyboardLayout {
+ keyWeight: 160
+ readonly property real normalKeyWidth: normalKey.width
+ readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
+ KeyboardRow {
+ Key {
+ text: "\"
+ }
+ Key {
+ id: normalKey
+ text: "/"
+ }
+ Key {
+ text: "("
+ }
+ Key {
+ text: ")"
+ }
+ Key {
+ text: "〔"
+ }
+ Key {
+ text: "〕"
+ }
+ Key {
+ text: "〈"
+ }
+ Key {
+ text: "〉"
+ }
+ Key {
+ text: "《"
+ }
+ Key {
+ text: "》"
+ }
+ }
+ KeyboardRow {
+ Key {
+ text: "→"
+ }
+ Key {
+ text: "←"
+ }
+ Key {
+ text: "↑"
+ }
+ Key {
+ text: "↓"
+ }
+ Key {
+ text: "■"
+ }
+ Key {
+ text: "□"
+ }
+ Key {
+ text: "●"
+ }
+ Key {
+ text: "○"
+ }
+ Key {
+ text: "【"
+ }
+ Key {
+ text: "】"
+ }
+ }
+ KeyboardRow {
+ Key {
+ displayText: (page + 1) + "/" + numPages
+ functionKey: true
+ onClicked: page = (page + 1) % numPages
+ highlighted: true
+ }
+ Key {
+ text: "『"
+ }
+ Key {
+ text: "』"
+ }
+ Key {
+ text: "「"
+ }
+ Key {
+ text: "」"
+ }
+ Key {
+ text: "★"
+ }
+ Key {
+ text: "☆"
+ }
+ Key {
+ text: "◆"
+ }
+ Key {
+ text: "◇"
+ }
+ BackspaceKey {
+ }
+ }
+ KeyboardRow {
+ SymbolModeKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ displayText: "ABC"
+ }
+ ChangeLanguageKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ Key {
+ key: Qt.Key_Comma
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: ","
+ smallText: "\u2699"
+ smallTextVisible: keyboard.isFunctionPopupListAvailable()
+ highlighted: true
+ }
+ SpaceKey {
+ }
+ Key {
+ key: Qt.Key_Period
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ text: "…"
+ highlighted: true
+ }
+ HideKeyboardKey {
+ weight: normalKeyWidth
+ Layout.fillWidth: false
+ }
+ EnterKey {
+ weight: functionKeyWidth
+ Layout.fillWidth: false
+ }
+ }
+ }
+ }
+}