File indexing completed on 2024-06-09 04:40:25
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "autocorrectionlineedit.h" 0008 #include <QKeyEvent> 0009 #include <QTextCursor> 0010 #include <TextAutoCorrectionCore/AutoCorrection> 0011 0012 using namespace TextAutoCorrectionWidgets; 0013 using namespace TextAutoCorrectionCore; 0014 class TextAutoCorrectionWidgets::AutoCorrectionLineEditPrivate 0015 { 0016 public: 0017 AutoCorrectionLineEditPrivate() 0018 : mAutoCorrection(new TextAutoCorrectionCore::AutoCorrection()) 0019 { 0020 } 0021 0022 ~AutoCorrectionLineEditPrivate() 0023 { 0024 if (mNeedToDeleteAutoCorrection) { 0025 delete mAutoCorrection; 0026 } 0027 } 0028 0029 TextAutoCorrectionCore::AutoCorrection *mAutoCorrection = nullptr; 0030 bool mNeedToDeleteAutoCorrection = true; 0031 }; 0032 0033 AutoCorrectionLineEdit::AutoCorrectionLineEdit(QWidget *parent) 0034 : QPlainTextEdit(parent) 0035 , d(new TextAutoCorrectionWidgets::AutoCorrectionLineEditPrivate) 0036 { 0037 setTabChangesFocus(true); 0038 // widget may not be resized vertically 0039 setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); 0040 setLineWrapMode(NoWrap); 0041 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 0042 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 0043 document()->adjustSize(); 0044 document()->setDocumentMargin(2); 0045 } 0046 0047 AutoCorrectionLineEdit::~AutoCorrectionLineEdit() = default; 0048 0049 TextAutoCorrectionCore::AutoCorrection *AutoCorrectionLineEdit::autocorrection() const 0050 { 0051 return d->mAutoCorrection; 0052 } 0053 0054 void AutoCorrectionLineEdit::setAutocorrection(AutoCorrection *autocorrect) 0055 { 0056 d->mNeedToDeleteAutoCorrection = false; 0057 delete d->mAutoCorrection; 0058 d->mAutoCorrection = autocorrect; 0059 } 0060 0061 void AutoCorrectionLineEdit::setAutocorrectionLanguage(const QString &language) 0062 { 0063 TextAutoCorrectionCore::AutoCorrectionSettings *settings = d->mAutoCorrection->autoCorrectionSettings(); 0064 settings->setLanguage(language); 0065 d->mAutoCorrection->setAutoCorrectionSettings(settings); 0066 } 0067 0068 void AutoCorrectionLineEdit::keyPressEvent(QKeyEvent *e) 0069 { 0070 if (d->mAutoCorrection && d->mAutoCorrection->autoCorrectionSettings()->isEnabledAutoCorrection()) { 0071 if ((e->key() == Qt::Key_Space) || (e->key() == Qt::Key_Enter) || (e->key() == Qt::Key_Return)) { 0072 if (!textCursor().hasSelection()) { 0073 int position = textCursor().position(); 0074 // no Html format in subject. => false 0075 const bool addSpace = d->mAutoCorrection->autocorrect(false, *document(), position); 0076 QTextCursor cur = textCursor(); 0077 cur.setPosition(position); 0078 if (e->key() == Qt::Key_Space) { 0079 if (addSpace) { 0080 cur.insertText(QStringLiteral(" ")); 0081 setTextCursor(cur); 0082 } 0083 return; 0084 } 0085 } 0086 } 0087 } 0088 QPlainTextEdit::keyPressEvent(e); 0089 } 0090 0091 #include "moc_autocorrectionlineedit.cpp"