Files
LAIC/venv/Lib/site-packages/PySide6/qml/QtQuick/VirtualKeyboard/InputPanel.qml
T
2026-04-29 07:19:21 +03:00

144 lines
5.0 KiB
QML

// 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
import QtQuick.VirtualKeyboard.Components
/*!
\qmltype InputPanel
\inqmlmodule QtQuick.VirtualKeyboard
\brief Provides the virtual keyboard UI.
\ingroup qmlclass
\ingroup qtvirtualkeyboard-qml
The keyboard size is automatically calculated from the available
width; that is, the keyboard maintains the aspect ratio specified by the current
style. Therefore the application should only set the \l {Item::}{width} and \l {Item::}{y}
coordinates of the InputPanel, and not the \l {Item::}{height}.
As with \l {Qt Virtual Keyboard QML Types}{all other QML types} provided by
the module, the \c QT_IM_MODULE environment variable must be set to
\c qtvirtualkeyboard before using InputPanel. For more information, see
\l {Loading the Plugin}.
\note You can have only one InputPanel instance in your application. The panel
will not be blocked by modal dialogs, but it can be obscured by items with a higher
\l {Item::}{z} value.
*/
Item {
id: inputPanel
/*!
\qmlproperty bool InputPanel::active
\since QtQuick.VirtualKeyboard 2.0
This property reflects the active status of the input panel.
The keyboard should be made visible to the user when this property is
\c true.
*/
property alias active: keyboard.active
/*!
\qmlproperty bool InputPanel::externalLanguageSwitchEnabled
\since QtQuick.VirtualKeyboard 2.4
This property enables the external language switch mechanism.
When this property is \c true, the virtual keyboard will not show
the built-in language popup, but will emit the \l externalLanguageSwitch
signal instead. The application can handle this signal and show a
custom language selection dialog instead.
*/
property bool externalLanguageSwitchEnabled
/*!
\qmlsignal InputPanel::externalLanguageSwitch(var localeList, int currentIndex)
\since QtQuick.VirtualKeyboard 2.4
This signal is emitted when \l externalLanguageSwitchEnabled is \c true
and the \l {user-guide-language}{language switch key} is pressed by the user.
It serves as a hook to display a custom language dialog instead of
the built-in language popup in the virtual keyboard.
The \a localeList parameter contains a list of locale names to choose
from. To get more information about a particular language, use the
\l[QtQml]{Qt::locale()}{Qt.locale()} function. The \a currentIndex
is the index of current locale in the \a localeList. This item should
be highlighted as the current item in the UI.
To select a new language, use the \l {VirtualKeyboardSettings::locale}
{VirtualKeyboardSettings.locale} property.
Below is an example that demonstrates a custom language dialog implementation:
\snippet qtvirtualkeyboard-custom-language-popup.qml popup
The dialog would then be declared:
\snippet qtvirtualkeyboard-custom-language-popup.qml declaring
In the application's InputPanel, add the following code:
\snippet qtvirtualkeyboard-custom-language-popup.qml using
The custom dialog will now be shown when the language switch key is pressed.
*/
signal externalLanguageSwitch(var localeList, int currentIndex)
/*! \internal */
property alias keyboard: keyboard
/*! \internal */
property bool desktopPanel: false
SelectionControl {
objectName: "selectionControl"
x: -parent.x
y: -parent.y
enabled: active && !keyboard.fullScreenMode && !desktopPanel
}
implicitHeight: keyboard.height - keyboard.wordCandidateView.y
Keyboard {
id: keyboard
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
}
MouseArea {
z: -1
anchors.fill: keyboard
enabled: active
hoverEnabled: active
}
Binding {
target: InputContext.priv
property: "keyboardRectangle"
value: keyboardRectangle()
when: !InputContext.animating && inputPanel.active
}
/*! \internal */
function keyboardRectangle() {
const forBindingX = x
const forBindingY = y
const rect = desktopPanel ?
Qt.rect(keyboard.x,
keyboard.y + keyboard.wordCandidateView.y,
keyboard.width,
keyboard.height - keyboard.wordCandidateView.y) :
Qt.rect(0, 0, width, height)
if (keyboard.shadowInputControl.visible) {
rect.y -= keyboard.shadowInputControl.height
rect.height += keyboard.shadowInputControl.height
}
return mapToItem(null, rect)
}
}