1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QVIRTUALKEYBOARDINPUTENGINE_H
5#define QVIRTUALKEYBOARDINPUTENGINE_H
6
7#include <QtCore/QObject>
8#include <QtCore/QPointer>
9#include <QtQml/qqml.h>
10#include <QtVirtualKeyboard/qvirtualkeyboard_global.h>
11
12QT_BEGIN_NAMESPACE
13
14class QVirtualKeyboardInputContext;
15class QVirtualKeyboardSelectionListModel;
16class QVirtualKeyboardAbstractInputMethod;
17class QVirtualKeyboardInputEnginePrivate;
18class QVirtualKeyboardTrace;
19
20class Q_VIRTUALKEYBOARD_EXPORT QVirtualKeyboardInputEngine : public QObject
21{
22 Q_OBJECT
23 Q_DISABLE_COPY(QVirtualKeyboardInputEngine)
24 Q_DECLARE_PRIVATE(QVirtualKeyboardInputEngine)
25 Q_PROPERTY(Qt::Key activeKey READ activeKey NOTIFY activeKeyChanged)
26 Q_PROPERTY(Qt::Key previousKey READ previousKey NOTIFY previousKeyChanged)
27 Q_PROPERTY(QVirtualKeyboardAbstractInputMethod *inputMethod READ inputMethod WRITE setInputMethod NOTIFY inputMethodChanged)
28 Q_PROPERTY(QList<int> inputModes READ inputModes NOTIFY inputModesChanged)
29 Q_PROPERTY(InputMode inputMode READ inputMode WRITE setInputMode NOTIFY inputModeChanged)
30 Q_PROPERTY(QList<int> patternRecognitionModes READ patternRecognitionModes NOTIFY patternRecognitionModesChanged)
31 Q_PROPERTY(QVirtualKeyboardSelectionListModel *wordCandidateListModel READ wordCandidateListModel NOTIFY wordCandidateListModelChanged)
32 Q_PROPERTY(bool wordCandidateListVisibleHint READ wordCandidateListVisibleHint NOTIFY wordCandidateListVisibleHintChanged)
33 Q_MOC_INCLUDE("qvirtualkeyboardabstractinputmethod.h")
34 QML_NAMED_ELEMENT(InputEngine)
35 QML_UNCREATABLE("InputEngine is only available via InputContext.inputEngine")
36 QML_ADDED_IN_VERSION(1, 0)
37 QML_EXTRA_VERSION(2, 0)
38
39 explicit QVirtualKeyboardInputEngine(QVirtualKeyboardInputContext *parent = nullptr);
40 void init();
41
42public:
43 enum class TextCase {
44 Lower,
45 Upper
46 };
47 Q_ENUM(TextCase)
48
49 enum class InputMode {
50 Latin,
51 Numeric,
52 Dialable,
53 Pinyin,
54 Cangjie,
55 Zhuyin,
56 Hangul,
57 Hiragana,
58 Katakana,
59 FullwidthLatin,
60 Greek,
61 Cyrillic,
62 Arabic,
63 Hebrew,
64 ChineseHandwriting,
65 JapaneseHandwriting,
66 KoreanHandwriting,
67 Thai,
68 Stroke,
69 Romaji,
70 HiraganaFlick,
71 };
72 Q_ENUM(InputMode)
73
74 enum class PatternRecognitionMode {
75 None,
76 PatternRecognitionDisabled = None,
77 Handwriting,
78 HandwritingRecoginition = Handwriting
79 };
80 Q_ENUM(PatternRecognitionMode)
81
82 enum class ReselectFlag {
83 WordBeforeCursor = 0x1,
84 WordAfterCursor = 0x2,
85 WordAtCursor = WordBeforeCursor | WordAfterCursor
86 };
87 Q_FLAG(ReselectFlag)
88 Q_DECLARE_FLAGS(ReselectFlags, ReselectFlag)
89
90public:
91 ~QVirtualKeyboardInputEngine();
92
93 Q_INVOKABLE bool virtualKeyPress(Qt::Key key, const QString &text, Qt::KeyboardModifiers modifiers, bool repeat);
94 Q_INVOKABLE void virtualKeyCancel();
95 Q_INVOKABLE bool virtualKeyRelease(Qt::Key key, const QString &text, Qt::KeyboardModifiers modifiers);
96 Q_INVOKABLE bool virtualKeyClick(Qt::Key key, const QString &text, Qt::KeyboardModifiers modifiers);
97
98 QVirtualKeyboardInputContext *inputContext() const;
99 Qt::Key activeKey() const;
100 Qt::Key previousKey() const;
101
102 QVirtualKeyboardAbstractInputMethod *inputMethod() const;
103 void setInputMethod(QVirtualKeyboardAbstractInputMethod *inputMethod);
104
105 QList<int> inputModes() const;
106
107 InputMode inputMode() const;
108 void setInputMode(InputMode inputMode);
109
110 QVirtualKeyboardSelectionListModel *wordCandidateListModel() const;
111 bool wordCandidateListVisibleHint() const;
112
113 QList<int> patternRecognitionModes() const;
114 Q_INVOKABLE QVirtualKeyboardTrace *traceBegin(
115 int traceId, PatternRecognitionMode patternRecognitionMode,
116 const QVariantMap &traceCaptureDeviceInfo, const QVariantMap &traceScreenInfo);
117 Q_INVOKABLE bool traceEnd(QVirtualKeyboardTrace *trace);
118
119 Q_INVOKABLE bool reselect(int cursorPosition, const ReselectFlags &reselectFlags);
120 bool clickPreeditText(int cursorPosition);
121
122Q_SIGNALS:
123 void virtualKeyClicked(Qt::Key key, const QString &text, Qt::KeyboardModifiers modifiers, bool isAutoRepeat);
124 void activeKeyChanged(Qt::Key key);
125 void previousKeyChanged(Qt::Key key);
126 void inputMethodChanged();
127 void inputMethodReset();
128 void inputMethodUpdate();
129 void inputModesChanged();
130 void inputModeChanged();
131 void patternRecognitionModesChanged();
132 void wordCandidateListModelChanged();
133 void wordCandidateListVisibleHintChanged();
134
135private Q_SLOTS:
136 void reset();
137 void update();
138 void shiftChanged();
139 void updateSelectionListModels();
140 void updateInputModes();
141
142protected:
143 void timerEvent(QTimerEvent *timerEvent) override;
144
145private:
146 friend class QVirtualKeyboardInputContext;
147 friend class QVirtualKeyboardInputContextPrivate;
148};
149
150Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(QVirtualKeyboardInputEngine::InputMode key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; }
151Q_DECLARE_OPERATORS_FOR_FLAGS(QVirtualKeyboardInputEngine::ReselectFlags)
152
153QT_END_NAMESPACE
154
155Q_DECLARE_METATYPE(QVirtualKeyboardInputEngine::TextCase)
156Q_DECLARE_METATYPE(QVirtualKeyboardInputEngine::InputMode)
157Q_DECLARE_METATYPE(QVirtualKeyboardInputEngine::PatternRecognitionMode)
158Q_DECLARE_METATYPE(QVirtualKeyboardInputEngine::ReselectFlag)
159
160#endif
161

source code of qtvirtualkeyboard/src/virtualkeyboard/qvirtualkeyboardinputengine.h