diff options
Diffstat (limited to 'src/components/KeyboardLayoutLoader.qml')
-rw-r--r-- | src/components/KeyboardLayoutLoader.qml | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/components/KeyboardLayoutLoader.qml b/src/components/KeyboardLayoutLoader.qml new file mode 100644 index 00000000..9c31ff1f --- /dev/null +++ b/src/components/KeyboardLayoutLoader.qml @@ -0,0 +1,115 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtQuick +import QtQuick.VirtualKeyboard + +/*! + \qmltype KeyboardLayoutLoader + \inqmlmodule QtQuick.VirtualKeyboard.Components + \ingroup qmlclass + \ingroup qtvirtualkeyboard-components-qml + \inherits Loader + \since QtQuick.VirtualKeyboard 1.1 + + \brief Allows dynamic loading of keyboard layout. + + This type is useful for keyboard layouts consisting of multiple pages of keys. + + A single keyboard layout (a page) is defined by using the Component + as a container. The active keyboard layout can then be changed by + setting the sourceComponent property to a different value. + + Example: + + \code + import QtQuick + import QtQuick.Layouts + import QtQuick.VirtualKeyboard + + // file: layouts/en_GB/symbols.qml + + KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + // Keyboard layout definition for page 1 + } + } + Component { + id: page2 + KeyboardLayout { + // Keyboard layout definition for page 2 + } + } + } + \endcode +*/ + +Loader { + /*! Sets the input method for all the keyboard layouts loaded + in this context. + + The input method can either be set separately for each keyboard + layout, or commonly at this context. If set separately, then this + property should not be modified. + */ + property var inputMethod: item ? item.inputMethod : null + + /*! This function may be overridden by the keyboard layout + to create the input method object dynamically. The default + implementation forwards the call to the child keyboard + layout. + + The input method object created by this function can outlive + keyboard layout transitions in certain cases. In particular, + this applies to the transitions between the layouts listed in + the sharedLayouts property. + */ + function createInputMethod() { + return item ? item.createInputMethod() : null + } + + /*! List of layout names which share the input method created + by the createInputMethod() function. + + If the list is empty (the default) the input method is not + shared with any other layout and will be destroyed when the + layout changes. + + The list should contain only the name of the layout type, + e.g., ['symbols']. The current layout does not have to be + included in the list. + */ + property var sharedLayouts: item ? item.sharedLayouts : null + + /*! Sets the input mode for all the keyboard layouts loaded + in this context. + + The input mode can either be set separately for each keyboard + layout, or commonly at this context. If set separately, then this + property should not be modified. + */ + property int inputMode: item ? item.inputMode : -1 + + property int __updateCount + + active: parent !== null + + onItemChanged: { + if (parent && item && __updateCount++ > 0) { + if (!keyboard.inputMethodNeedsReset) + keyboard.updateInputMethod() + keyboard.notifyLayoutChanged() + } + } + + function scanLayout() { + if (item === null) + return null + return item.scanLayout() + } +} |