19 #ifndef QTSPELL_TEXTEDITCHECKER_P_HPP
20 #define QTSPELL_TEXTEDITCHECKER_P_HPP
22 #include "QtSpell.hpp"
23 #include "Checker_p.hpp"
25 #include <QRegularExpression>
26 #include <QTextCursor>
33 class TextEditChecker;
37 class TextEditCheckerPrivate :
public CheckerPrivate
40 TextEditCheckerPrivate();
41 virtual ~TextEditCheckerPrivate();
43 void setTextEdit(TextEditProxy* newTextEdit);
44 bool noSpellingPropertySet(
const QTextCursor& cursor)
const;
46 TextEditProxy* textEdit =
nullptr;
47 QTextDocument* document =
nullptr;
48 UndoRedoStack* undoRedoStack =
nullptr;
49 bool undoRedoInProgress =
false;
50 Qt::ContextMenuPolicy oldContextMenuPolicy;
51 int noSpellingProperty = -1;
53 Q_DECLARE_PUBLIC(TextEditChecker)
63 : QTextCursor(), m_wordRegEx(QRegularExpression(
"^\\w$")) {}
65 : QTextCursor(document), m_wordRegEx(QRegularExpression(
"^\\w$")) {}
67 : QTextCursor(block), m_wordRegEx(QRegularExpression(
"^\\w$")) {}
69 : QTextCursor(cursor), m_wordRegEx(QRegularExpression(
"^\\w$")) {}
104 return nextChar().contains(m_wordRegEx) ||
prevChar().contains(m_wordRegEx);
112 return character.contains(m_wordRegEx);
116 QRegularExpression m_wordRegEx;
121 class TextEditProxy :
public QObject {
124 TextEditProxy(QObject* parent =
nullptr) : QObject(parent) {}
125 virtual QTextCursor textCursor()
const = 0;
126 virtual QTextDocument* document()
const = 0;
127 virtual QPoint mapToGlobal(
const QPoint& pos)
const = 0;
128 virtual QMenu* createStandardContextMenu() = 0;
129 virtual QTextCursor cursorForPosition(
const QPoint& pos)
const = 0;
130 virtual void setContextMenuPolicy(Qt::ContextMenuPolicy policy) = 0;
131 virtual void setTextCursor(
const QTextCursor& cursor) = 0;
132 virtual Qt::ContextMenuPolicy contextMenuPolicy()
const = 0;
133 virtual void installEventFilter(QObject* filterObj) = 0;
134 virtual void removeEventFilter(QObject* filterObj) = 0;
135 virtual void ensureCursorVisible() = 0;
138 void customContextMenuRequested(
const QPoint& pos);
140 void editDestroyed();
144 class TextEditProxyT :
public TextEditProxy {
146 TextEditProxyT(T* textEdit, QObject* parent =
nullptr) : TextEditProxy(parent), m_textEdit(textEdit) {
147 connect(textEdit, &T::customContextMenuRequested,
this, &TextEditProxy::customContextMenuRequested);
148 connect(textEdit, &T::textChanged,
this, &TextEditProxy::textChanged);
149 connect(textEdit, &T::destroyed,
this, &TextEditProxy::editDestroyed);
151 QTextCursor textCursor()
const{
return m_textEdit->textCursor(); }
152 QTextDocument* document()
const{
return m_textEdit->document(); }
153 QPoint mapToGlobal(
const QPoint& pos)
const{
return m_textEdit->mapToGlobal(pos); }
154 QMenu* createStandardContextMenu(){
return m_textEdit->createStandardContextMenu(); }
155 QTextCursor cursorForPosition(
const QPoint& pos)
const{
return m_textEdit->cursorForPosition(pos); }
156 void setContextMenuPolicy(Qt::ContextMenuPolicy policy){ m_textEdit->setContextMenuPolicy(policy); }
157 void setTextCursor(
const QTextCursor& cursor){ m_textEdit->setTextCursor(cursor); }
158 Qt::ContextMenuPolicy contextMenuPolicy()
const{
return m_textEdit->contextMenuPolicy(); }
159 void installEventFilter(QObject* filterObj){ m_textEdit->installEventFilter(filterObj); }
160 void removeEventFilter(QObject* filterObj){ m_textEdit->removeEventFilter(filterObj); }
161 void ensureCursorVisible() { m_textEdit->ensureCursorVisible(); }
164 T* m_textEdit =
nullptr;
void moveWordStart(MoveMode moveMode=MoveAnchor)
Move the cursor to the start of the current word. Cursor must be inside a word. This method correctly...
QString prevChar(int num=1) const
Retreive the num-th previous character.
bool isWordChar(const QString &character) const
Returns whether the specified character is a word character.
void moveWordEnd(MoveMode moveMode=MoveAnchor)
Move the cursor to the end of the current word. Cursor must be inside a word. This method correctly h...
QString nextChar(int num=1) const
Retreive the num-th next character.
bool isInsideWord() const
Returns whether the cursor is inside a word.