1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Settings
Item {
property bool active
property alias listView: listView
property point origin
signal clicked
LayoutMirroring.enabled: false
LayoutMirroring.childrenInherit: true
z: 1
visible: active
anchors.fill: parent
ListModel {
id: listModel
}
ListView {
id: listView
spacing: 0
model: listModel
currentIndex: -1
delegate: keyboard.style.functionPopupListDelegate
highlight: keyboard.style.functionPopupListHighlight ? keyboard.style.functionPopupListHighlight : defaultHighlight
highlightMoveDuration: 0
highlightResizeDuration: 0
keyNavigationWraps: true
orientation: ListView.Horizontal
width: contentItem.childrenRect.width
height: contentItem.childrenRect.height
x: {
var result = origin.x
if (count > 0) {
const item = itemAtIndex(0)
if (item) {
result -= Math.round(item.width / 2)
}
}
return result
}
y: origin.y - height
Component {
id: defaultHighlight
Item {}
}
}
Loader {
id: backgroundLoader
sourceComponent: keyboard.style.functionPopupListBackground
anchors.fill: listView
z: -1
Binding {
target: backgroundLoader.item
property: "view"
value: listView
when: backgroundLoader.item && backgroundLoader.item.hasOwnProperty("view")
}
}
onClicked: {
if (active && listView.currentIndex >= 0 && listView.currentIndex < listView.model.count) {
const listElement = listView.model.get(listView.currentIndex)
keyboard.doKeyboardFunction(listElement.keyboardFunction)
}
}
function open(key, originX, originY) {
listModel.clear()
for (const keyboardFunction of [
QtVirtualKeyboard.KeyboardFunction.HideInputPanel,
QtVirtualKeyboard.KeyboardFunction.ChangeLanguage,
QtVirtualKeyboard.KeyboardFunction.ToggleHandwritingMode,
]) {
const functionKey = InputContext.priv.keyboardFunctionKey(keyboardFunction)
if (keyboard.isKeyboardFunctionAvailable(keyboardFunction) &&
!(VirtualKeyboardSettings.visibleFunctionKeys & functionKey)) {
const listElement = {
keyboardFunction: keyboardFunction
}
listModel.append(listElement)
}
}
listView.currentIndex = (listModel.count > 0) ? 0 : -1
origin = Qt.binding(function() {
return Qt.point(Math.min(Math.max(0, originX), width - listView.width), originY)
})
active = listView.currentIndex !== -1
return active
}
function move(pt) {
var listPt = mapToItem(listView, pt.x, pt.y)
var newIndex = listView.indexAt(listPt.x, Math.max(1, Math.min(listView.height - 1, listPt.y)))
if (newIndex !== listView.currentIndex) {
listView.currentIndex = newIndex
}
}
function close() {
listView.currentIndex = -1
active = false
}
}
|