aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp')
-rw-r--r--src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp b/src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp
new file mode 100644
index 00000000..fb27002b
--- /dev/null
+++ b/src/plugins/cerence/xt9/plugin/xt9jinputmethodprivate.cpp
@@ -0,0 +1,116 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "xt9jinputmethodprivate_p.h"
+#include <QtVirtualKeyboard/qvirtualkeyboardinputcontext.h>
+#include <QTextFormat>
+
+QT_BEGIN_NAMESPACE
+namespace QtVirtualKeyboard {
+
+Xt9JInputMethodPrivate::Xt9JInputMethodPrivate(Xt9JInputMethod *q) :
+ Xt9AwInputMethodPrivate(q, new Xt9JIme(this), QStringLiteral("xt9j.dlm")),
+ isModifyKeyEnabled(false)
+{
+}
+
+void Xt9JInputMethodPrivate::updateLdb()
+{
+ Xt9AwInputMethodPrivate::updateLdb();
+ XT9_API(ET9AWSetMultiWordInputProperties, &xt9Ime()->sLingInfo, ET9AW_MWI_SegmentMode_Manual, 1);
+ if (inputMode == QVirtualKeyboardInputEngine::InputMode::Katakana) {
+ static const ET9AW_UtilityWord eList[] = {
+ ET9AW_UtilityWord_Katakana_FW,
+ ET9AW_UtilityWord_Hiragana_FW,
+ ET9AW_UtilityWord_Romaji_IC_HW,
+ ET9AW_UtilityWord_Romaji_LC_HW,
+ ET9AW_UtilityWord_Romaji_UC_HW
+ };
+ XT9_API(ET9AWSetUtilityWords, &xt9Ime()->sLingInfo, eList, sizeof(eList) / sizeof(ET9AW_UtilityWord), 2);
+ } else if (inputMode == QVirtualKeyboardInputEngine::InputMode::Hiragana) {
+ static const ET9AW_UtilityWord eList[] = {
+ ET9AW_UtilityWord_Hiragana_FW,
+ ET9AW_UtilityWord_Katakana_FW,
+ ET9AW_UtilityWord_Romaji_IC_HW,
+ ET9AW_UtilityWord_Romaji_LC_HW,
+ ET9AW_UtilityWord_Romaji_UC_HW
+ };
+ XT9_API(ET9AWSetUtilityWords, &xt9Ime()->sLingInfo, eList, sizeof(eList) / sizeof(ET9AW_UtilityWord), 2);
+ } else if (inputMode == QVirtualKeyboardInputEngine::InputMode::Latin) {
+ static const ET9AW_UtilityWord eList[] = {
+ ET9AW_UtilityWord_Romaji_IC_HW,
+ ET9AW_UtilityWord_Hiragana_FW,
+ ET9AW_UtilityWord_Katakana_FW,
+ ET9AW_UtilityWord_Romaji_LC_HW,
+ ET9AW_UtilityWord_Romaji_UC_HW
+ };
+ XT9_API(ET9AWSetUtilityWords, &xt9Ime()->sLingInfo, eList, sizeof(eList) / sizeof(ET9AW_UtilityWord), 2);
+ } else if (inputMode == QVirtualKeyboardInputEngine::InputMode::FullwidthLatin) {
+ static const ET9AW_UtilityWord eList[] = {
+ ET9AW_UtilityWord_Romaji_IC_FW,
+ ET9AW_UtilityWord_Hiragana_FW,
+ ET9AW_UtilityWord_Katakana_FW,
+ ET9AW_UtilityWord_Romaji_LC_HW,
+ ET9AW_UtilityWord_Romaji_UC_HW
+ };
+ XT9_API(ET9AWSetUtilityWords, &xt9Ime()->sLingInfo, eList, sizeof(eList) / sizeof(ET9AW_UtilityWord), 2);
+ }
+}
+
+void Xt9JInputMethodPrivate::updatePreeditText()
+{
+ Q_Q(Xt9JInputMethod);
+
+ QString exactWord = xt9Ime()->exactWord();
+ if (inputMode == QVirtualKeyboardInputEngine::InputMode::Katakana) {
+ exactWord = xt9Ime()->codeConverter->convertFrom(exactWord);
+ }
+
+ QList<QInputMethodEvent::Attribute> attributes;
+ QTextCharFormat textFormat;
+ textFormat.setUnderlineStyle(QTextCharFormat::SingleUnderline);
+ attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 0, exactWord.length(), textFormat));
+
+ ET9U16 wCurrLen;
+ if (!XT9_API(ET9GetSegmentationLength, &xt9Ime()->sWordSymbInfo, &wCurrLen)) {
+ attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, wCurrLen, 1, QVariant()));
+ }
+
+ setModifyKeyEnabled(!exactWord.isEmpty());
+
+ q->inputContext()->setPreeditText(exactWord, attributes);
+}
+
+ET9U32 Xt9JInputMethodPrivate::inputModeToET9InputMode(QVirtualKeyboardInputEngine::InputMode aInputMode) const
+{
+ switch (aInputMode) {
+ case QVirtualKeyboardInputEngine::InputMode::Latin:
+ return ET9AWInputMode_Transliteration;
+
+ case QVirtualKeyboardInputEngine::InputMode::Romaji:
+ return ET9AWInputMode_RomajiConversion;
+
+ default:
+ break;
+ }
+
+ return ET9AWInputMode_Conversion;
+}
+
+void Xt9JInputMethodPrivate::reset()
+{
+ Xt9AwInputMethodPrivate::reset();
+ setModifyKeyEnabled(false);
+}
+
+void Xt9JInputMethodPrivate::setModifyKeyEnabled(bool value)
+{
+ if (isModifyKeyEnabled != value) {
+ isModifyKeyEnabled = value;
+ Q_Q(Xt9JInputMethod);
+ emit q->modifyKeyEnabledChanged();
+ }
+}
+
+} // namespace QtVirtualKeyboard
+QT_END_NAMESPACE