Initial commit
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user