aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp')
-rw-r--r--src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp b/src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp
new file mode 100644
index 00000000..4bb3c691
--- /dev/null
+++ b/src/plugins/cerence/xt9/plugin/xt9awinputmethodprivate.cpp
@@ -0,0 +1,147 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "xt9awinputmethodprivate_p.h"
+#include "xt9awinputmethod_p.h"
+#include "xt9languagemap.h"
+#include <QtVirtualKeyboard/qvirtualkeyboardinputengine.h>
+#include <QtVirtualKeyboard/qvirtualkeyboardinputcontext.h>
+#include <QtVirtualKeyboard/qvirtualkeyboarddictionarymanager.h>
+#include <QtVirtualKeyboard/private/settings_p.h>
+#include <et9api.h>
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+namespace QtVirtualKeyboard {
+
+Xt9AwInputMethodPrivate::Xt9AwInputMethodPrivate(Xt9InputMethod *q, Xt9Ime *xt9Ime, const QString &aDlmFileName) :
+ Xt9InputMethodPrivate(q, xt9Ime, aDlmFileName)
+{
+}
+
+Xt9AwInputMethodPrivate::Xt9AwInputMethodPrivate(Xt9AwInputMethod *q) :
+ Xt9InputMethodPrivate(q, new Xt9AwIme(this), QStringLiteral("xt9aw.dlm"))
+{
+}
+
+void Xt9AwInputMethodPrivate::uninit()
+{
+ Xt9InputMethodPrivate::uninit();
+
+ defaultDictionaryDisabledConnection = QMetaObject::Connection();
+}
+
+void Xt9AwInputMethodPrivate::bindToSettings()
+{
+ Xt9InputMethodPrivate::bindToSettings();
+
+ if (!defaultDictionaryDisabledConnection)
+ defaultDictionaryDisabledConnection = QObjectPrivate::connect(
+ Settings::instance(), &Settings::defaultDictionaryDisabledChanged,
+ this, &Xt9AwInputMethodPrivate::onDefaultDictionaryDisabledChanged);
+}
+
+void Xt9AwInputMethodPrivate::updateLdb()
+{
+ Xt9InputMethodPrivate::updateLdb();
+
+ xt9Ime()->setLdbEnabled(!Settings::instance()->isDefaultDictionaryDisabled());
+}
+
+void Xt9AwInputMethodPrivate::selectionListSelectItem(int index)
+{
+ Q_Q(Xt9AwInputMethod);
+ Xt9DeferredSelectionListUpdate deferredSelectionListUpdate(this);
+
+ if (index >= 0 && index < selectionList.size()) {
+ QVirtualKeyboardInputContext *ic = q->inputContext();
+ const QString &selectedWord = selectionList.at(index);
+
+ // Auto space after next word prediction
+ bool wordIsPunct = selectedWord.length() == 1 && selectedWord.at(0).isPunct();
+ QString exactWord = xt9Ime()->exactWord();
+ if (!wordIsPunct && exactWord.isEmpty() && isAutoSpaceAllowed())
+ ic->commit(QLatin1String(" "));
+
+ // Commit selected word
+ xt9Ime()->selectWord(index, true);
+ ic->commit(selectedWord);
+ }
+
+ reset();
+ setAutoSpaceAllowed(true);
+
+ // Next word prediction
+ buildSelectionList();
+}
+
+bool Xt9AwInputMethodPrivate::reselectWord(const QString &word)
+{
+ ET9STATUS eStatus;
+ ET9U8 totalWords;
+ ET9U8 defaultListIndex;
+ ET9BOOL selectedWasAutomatic;
+ ET9BOOL wasFoundInHistory;
+
+ xt9Ime()->cursorMoved();
+
+ eStatus = XT9_API(ET9AWReselectWord,
+ &xt9Ime()->sLingInfo,
+ &xt9Ime()->sKdbInfo,
+ static_cast<const ET9SYMB *>(word.utf16()),
+ static_cast<ET9U16>(word.length()),
+ ET9AWReselectMode_Edit_Retain_Default,
+ &totalWords,
+ &defaultListIndex,
+ &selectedWasAutomatic,
+ &wasFoundInHistory);
+
+ if (eStatus)
+ return false;
+
+ buildSelectionList();
+
+ return true;
+}
+
+void Xt9AwInputMethodPrivate::learnWord(const QString &word)
+{
+ xt9Ime()->noteWordDone(word);
+}
+
+bool Xt9AwInputMethodPrivate::removeFromDictionary(const QString &word)
+{
+ ET9STATUS eStatus = XT9_API(ET9AWDLMDeleteWord,
+ &xt9Ime()->sLingInfo,
+ static_cast<const ET9SYMB *>(word.utf16()),
+ static_cast<ET9U16>(word.length()));
+
+ return !eStatus;
+}
+
+bool Xt9AwInputMethodPrivate::isJoiner(const QChar &c) const
+{
+ if (Xt9InputMethodPrivate::isJoiner(c))
+ return true;
+
+ if (c.isPunct() || c.isSymbol()) {
+ ushort unicode = c.unicode();
+ if (unicode == Qt::Key_Apostrophe || unicode == Qt::Key_Minus)
+ return true;
+ }
+ return false;
+}
+
+ET9U32 Xt9AwInputMethodPrivate::inputModeToET9InputMode(QVirtualKeyboardInputEngine::InputMode aInputMode) const
+{
+ Q_UNUSED(aInputMode)
+ return ET9AWInputMode_Default;
+}
+
+void Xt9AwInputMethodPrivate::onDefaultDictionaryDisabledChanged()
+{
+ xt9Ime()->setLdbEnabled(!Settings::instance()->isDefaultDictionaryDisabled());
+}
+
+} // namespace QtVirtualKeyboard
+QT_END_NAMESPACE