| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // Copyright (C) 2016 The Qt Company Ltd.
- // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
- import QtQuick
- import QtQuick.VirtualKeyboard
- Item {
- property bool active: listView.currentIndex != -1
- property int highlightIndex: -1
- property alias listView: listView
- property int keyCode
- 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
- delegate: keyboard.style.alternateKeysListDelegate
- highlight: keyboard.style.alternateKeysListHighlight ? keyboard.style.alternateKeysListHighlight : defaultHighlight
- highlightMoveDuration: 0
- highlightResizeDuration: 0
- keyNavigationWraps: true
- orientation: ListView.Horizontal
- height: keyboard.style ? keyboard.style.alternateKeysListItemHeight : 0
- x: origin.x
- y: keyboard.style ? origin.y - height - keyboard.style.alternateKeysListBottomMargin : 0
- Component {
- id: defaultHighlight
- Item {}
- }
- }
- Loader {
- id: backgroundLoader
- sourceComponent: keyboard.style.alternateKeysListBackground
- anchors.fill: listView
- z: -1
- states: State {
- name: "highlighted"
- when: highlightIndex !== -1 && highlightIndex === listView.currentIndex &&
- backgroundLoader.item !== null && backgroundLoader.item.hasOwnProperty("currentItemHighlight")
- PropertyChanges {
- target: backgroundLoader.item
- currentItemHighlight: true
- }
- }
- }
- onClicked: {
- if (active && listView.currentIndex >= 0 && listView.currentIndex < listView.model.count) {
- var activeKey = listView.model.get(listView.currentIndex)
- InputContext.inputEngine.virtualKeyClick(keyCode, activeKey.data,
- InputContext.uppercase ? Qt.ShiftModifier : 0)
- }
- }
- function open(key, originX, originY) {
- keyCode = key.key
- var alternativeKeys = key.effectiveAlternativeKeys
- var displayAlternativeKeys = key.displayAlternativeKeys
- if (alternativeKeys.length > 0 && displayAlternativeKeys.length === alternativeKeys.length) {
- for (var i = 0; i < alternativeKeys.length; i++) {
- listModel.append({
- "text": InputContext.uppercase ? displayAlternativeKeys[i].toUpperCase() : displayAlternativeKeys[i],
- "data": InputContext.uppercase ? alternativeKeys[i].toUpperCase() : alternativeKeys[i]
- })
- }
- listView.width = keyboard.style.alternateKeysListItemWidth * listModel.count
- listView.forceLayout()
- highlightIndex = key.effectiveAlternativeKeysHighlightIndex
- if (highlightIndex === -1) {
- console.log("AlternativeKeys: active key \"" + key.text + "\" not found in alternativeKeys \"" + alternativeKeys + ".\"")
- highlightIndex = 0
- }
- listView.currentIndex = highlightIndex
- var currentItemOffset = (listView.currentIndex + 0.5) * keyboard.style.alternateKeysListItemWidth
- origin = Qt.point(Math.min(Math.max(keyboard.style.alternateKeysListLeftMargin, originX - currentItemOffset), width - listView.width - keyboard.style.alternateKeysListRightMargin), originY)
- if (backgroundLoader.item && backgroundLoader.item.hasOwnProperty("currentItemOffset")) {
- backgroundLoader.item.currentItemOffset = currentItemOffset
- }
- }
- return active
- }
- function move(mouseX) {
- var newIndex = listView.indexAt(Math.max(1, Math.min(listView.width - 1, mapToItem(listView, mouseX, 0).x)), 1)
- if (newIndex !== listView.currentIndex) {
- listView.currentIndex = newIndex
- }
- }
- function close() {
- listView.currentIndex = -1
- listModel.clear()
- }
- }
|