File: autocorrectionlineedit.cpp

package info (click to toggle)
ktextaddons 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,360 kB
  • sloc: cpp: 54,647; ansic: 6,591; xml: 2,630; sh: 11; makefile: 7
file content (93 lines) | stat: -rw-r--r-- 3,019 bytes parent folder | download
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"