diff options
Diffstat (limited to 'src/components/WordCandidatePopupList.qml')
-rw-r--r-- | src/components/WordCandidatePopupList.qml | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/components/WordCandidatePopupList.qml b/src/components/WordCandidatePopupList.qml new file mode 100644 index 00000000..a9c802a5 --- /dev/null +++ b/src/components/WordCandidatePopupList.qml @@ -0,0 +1,59 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtQuick +// Deliberately imported after QtQuick to avoid missing restoreMode property in Binding. Fix in Qt 6. +import QtQml +import QtQuick.VirtualKeyboard + +PopupList { + id: wordCandidatePopupList + + readonly property int preferredVisibleItems: { + if (!currentItem) + return 0 + var maxHeight = flipVertical ? Qt.inputMethod.cursorRectangle.y : parent.height - Qt.inputMethod.cursorRectangle.height - Qt.inputMethod.cursorRectangle.y + var result = Math.min(count, maxVisibleItems) + while (result > 2 && result * currentItem.height > maxHeight) + --result + return result + } + readonly property bool flipVertical: currentItem && + Qt.inputMethod.cursorRectangle.y + (Qt.inputMethod.cursorRectangle.height / 2) > (parent.height / 2) && + Qt.inputMethod.cursorRectangle.y + Qt.inputMethod.cursorRectangle.height + (currentItem.height * 2) > parent.height + + height: currentItem ? currentItem.height * preferredVisibleItems + (spacing * preferredVisibleItems - 1) : 0 + Binding { + target: wordCandidatePopupList + property: "x" + value: Math.round(Qt.inputMethod.cursorRectangle.x - + (wordCandidatePopupList.currentItem ? + (wordCandidatePopupList.currentItem.hasOwnProperty("cursorAnchor") ? + wordCandidatePopupList.currentItem.cursorAnchor : wordCandidatePopupList.currentItem.width) : 0)) + when: wordCandidatePopupList.visible + restoreMode: Binding.RestoreBinding + } + Binding { + target: wordCandidatePopupList + property: "y" + value: Math.round(wordCandidatePopupList.flipVertical ? Qt.inputMethod.cursorRectangle.y - wordCandidatePopupList.height : Qt.inputMethod.cursorRectangle.y + Qt.inputMethod.cursorRectangle.height) + when: wordCandidatePopupList.visible + restoreMode: Binding.RestoreBinding + } + model: enabled ? InputContext.inputEngine.wordCandidateListModel : null + + onContentWidthChanged: viewResizeTimer.restart() + + Timer { + id: viewResizeTimer + interval: 0 + repeat: false + onTriggered: wordCandidatePopupList.width = wordCandidatePopupList.contentWidth + } + + Connections { + target: wordCandidatePopupList.model ? wordCandidatePopupList.model : null + function onActiveItemChanged(index) { wordCandidatePopupList.currentIndex = index } + function onItemSelected() { if (wordCandidatePopupList.currentItem) keyboard.soundEffect.play(wordCandidatePopupList.currentItem.soundEffect) } + } +} |