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
|
/*
SPDX-FileCopyrightText: 2022-2025 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "autocorrectionlineedit.h"
using namespace Qt::Literals::StringLiterals;
#include <QKeyEvent>
#include <QTextCursor>
#include <TextAutoCorrectionCore/AutoCorrection>
using namespace TextAutoCorrectionWidgets;
using namespace TextAutoCorrectionCore;
class TextAutoCorrectionWidgets::AutoCorrectionLineEditPrivate
{
public:
AutoCorrectionLineEditPrivate()
: mAutoCorrection(new TextAutoCorrectionCore::AutoCorrection())
{
}
~AutoCorrectionLineEditPrivate()
{
if (mNeedToDeleteAutoCorrection) {
delete mAutoCorrection;
}
}
TextAutoCorrectionCore::AutoCorrection *mAutoCorrection = nullptr;
bool mNeedToDeleteAutoCorrection = true;
};
AutoCorrectionLineEdit::AutoCorrectionLineEdit(QWidget *parent)
: QPlainTextEdit(parent)
, d(new TextAutoCorrectionWidgets::AutoCorrectionLineEditPrivate)
{
setTabChangesFocus(true);
// widget may not be resized vertically
setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
setLineWrapMode(NoWrap);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
document()->adjustSize();
document()->setDocumentMargin(2);
}
AutoCorrectionLineEdit::~AutoCorrectionLineEdit() = default;
TextAutoCorrectionCore::AutoCorrection *AutoCorrectionLineEdit::autocorrection() const
{
return d->mAutoCorrection;
}
void AutoCorrectionLineEdit::setAutocorrection(AutoCorrection *autocorrect)
{
d->mNeedToDeleteAutoCorrection = false;
delete d->mAutoCorrection;
d->mAutoCorrection = autocorrect;
}
void AutoCorrectionLineEdit::setAutocorrectionLanguage(const QString &language)
{
TextAutoCorrectionCore::AutoCorrectionSettings *settings = d->mAutoCorrection->autoCorrectionSettings();
settings->setLanguage(language);
d->mAutoCorrection->setAutoCorrectionSettings(settings);
}
void AutoCorrectionLineEdit::keyPressEvent(QKeyEvent *e)
{
if (d->mAutoCorrection && d->mAutoCorrection->autoCorrectionSettings()->isEnabledAutoCorrection()) {
if ((e->key() == Qt::Key_Space) || (e->key() == Qt::Key_Enter) || (e->key() == Qt::Key_Return)) {
if (!textCursor().hasSelection()) {
int position = textCursor().position();
// no Html format in subject. => false
const bool addSpace = d->mAutoCorrection->autocorrect(false, *document(), position);
QTextCursor cur = textCursor();
cur.setPosition(position);
if (e->key() == Qt::Key_Space) {
if (addSpace) {
cur.insertText(u" "_s);
setTextCursor(cur);
}
return;
}
}
}
}
QPlainTextEdit::keyPressEvent(e);
}
#include "moc_autocorrectionlineedit.cpp"
|