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