// 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) } }