-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkeyboardhandler.cpp
More file actions
executable file
·122 lines (107 loc) · 3.22 KB
/
keyboardhandler.cpp
File metadata and controls
executable file
·122 lines (107 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "keyboardhandler.h"
#include <QKeyEvent>
#include <QCoreApplication>
#include <QDebug>
KeyboardHandler::KeyboardHandler(QObject *parent)
: QObject{parent}
, m_focusObject(nullptr)
, m_showKeyboard(false)
, m_useNumericKeyboard(false)
, m_useCaps(false)
{}
void KeyboardHandler::keyPressed(const QString& character)
{
if (m_focusObject)
{
if (m_focusObject)
{
QKeyEvent keyPressEvent = QKeyEvent(QEvent::Type::KeyPress, Qt::Key_1, Qt::NoModifier, character);
QCoreApplication::sendEvent(m_focusObject, &keyPressEvent);
}
}
}
void KeyboardHandler::backSpacePressed()
{
QKeyEvent keyPressEvent = QKeyEvent(QEvent::Type::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
QCoreApplication::sendEvent(m_focusObject, &keyPressEvent);
}
void KeyboardHandler::enterPressed()
{
QKeyEvent keyPressEvent = QKeyEvent(QEvent::Type::KeyPress, Qt::Key_Enter, Qt::NoModifier);
QCoreApplication::sendEvent(m_focusObject, &keyPressEvent);
}
void KeyboardHandler::hideKeyboard()
{
qDebug() << "Request to close keyboard.";
m_showKeyboard = false;
emit showKeyboardChanged();
}
void KeyboardHandler::requestNumericKeyboard()
{
m_useNumericKeyboard = true;
emit useNumericKeyboardChanged();
}
void KeyboardHandler::requestMainKeyboard()
{
m_useNumericKeyboard = false;
emit useNumericKeyboardChanged();
}
bool KeyboardHandler::showKeyboard() const
{
return m_showKeyboard;
}
bool KeyboardHandler::useNumericKeyboard() const
{
return m_useNumericKeyboard;
}
bool KeyboardHandler::useCaps() const
{
return m_useCaps;
}
void KeyboardHandler::setUseCaps(bool useCaps)
{
if (m_useCaps != useCaps)
{
m_useCaps = useCaps;
emit useCapsChanged();
}
}
QObject *KeyboardHandler::focusObject() const
{
return m_focusObject;
}
void KeyboardHandler::onFocusObjectChanged(QObject *focusObject)
{
m_showKeyboard = false;
m_focusObject = focusObject;
if (m_focusObject != nullptr)
{
auto className = focusObject->metaObject()->className();
if (QString::fromStdString(className).compare("QQuickTextInput", Qt::CaseSensitive) == 0)
{
auto inputMethodHintsProperty = focusObject->property("inputMethodHints");
if (inputMethodHintsProperty.isNull() == false)
{
bool ok = false;
auto inputMethodHintsValue = inputMethodHintsProperty.toInt(&ok);
if (inputMethodHintsValue == static_cast<int>(Qt::ImhFormattedNumbersOnly))
{
m_useNumericKeyboard = true;
}
else
{
m_useNumericKeyboard = false;
}
emit useNumericKeyboardChanged();
}
m_showKeyboard = true;
}
else if (QString::fromStdString(className).compare("QQuickTextEdit", Qt::CaseSensitive) == 0)
{
m_useNumericKeyboard = false;
emit useNumericKeyboardChanged();
m_showKeyboard = true;
}
}
emit showKeyboardChanged();
}