1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtQuick module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QQUICKTEXTINPUT_P_H
41#define QQUICKTEXTINPUT_P_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists purely as an
48// implementation detail. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include "qquickimplicitsizeitem_p.h"
55#include <QtGui/qtextoption.h>
56#include <QtGui/qvalidator.h>
57
58QT_BEGIN_NAMESPACE
59
60class QQuickTextInputPrivate;
61class QValidator;
62class Q_QUICK_PRIVATE_EXPORT QQuickTextInput : public QQuickImplicitSizeItem
63{
64 Q_OBJECT
65
66 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
67 Q_PROPERTY(int length READ length NOTIFY textChanged)
68 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
69 Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor NOTIFY selectionColorChanged)
70 Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged)
71 Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
72 Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged)
73 Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged)
74 Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
75 Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
76
77 Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged)
78 Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged)
79 Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
80 Q_PROPERTY(QRectF cursorRectangle READ cursorRectangle NOTIFY cursorRectangleChanged)
81 Q_PROPERTY(QQmlComponent *cursorDelegate READ cursorDelegate WRITE setCursorDelegate NOTIFY cursorDelegateChanged)
82 Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode NOTIFY overwriteModeChanged)
83 Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged)
84 Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged)
85 Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectedTextChanged)
86
87 Q_PROPERTY(int maximumLength READ maxLength WRITE setMaxLength NOTIFY maximumLengthChanged)
88 Q_PROPERTY(QValidator* validator READ validator WRITE setValidator NOTIFY validatorChanged)
89 Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask NOTIFY inputMaskChanged)
90 Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints NOTIFY inputMethodHintsChanged)
91
92 Q_PROPERTY(bool acceptableInput READ hasAcceptableInput NOTIFY acceptableInputChanged)
93 Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged)
94 Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged)
95 Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged)
96 Q_PROPERTY(int passwordMaskDelay READ passwordMaskDelay WRITE setPasswordMaskDelay RESET resetPasswordMaskDelay NOTIFY passwordMaskDelayChanged REVISION 4)
97 Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged)
98 Q_PROPERTY(QString preeditText READ preeditText NOTIFY preeditTextChanged REVISION 7)
99 Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged)
100 Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged)
101 Q_PROPERTY(SelectionMode mouseSelectionMode READ mouseSelectionMode WRITE setMouseSelectionMode NOTIFY mouseSelectionModeChanged)
102 Q_PROPERTY(bool persistentSelection READ persistentSelection WRITE setPersistentSelection NOTIFY persistentSelectionChanged)
103 Q_PROPERTY(bool canPaste READ canPaste NOTIFY canPasteChanged)
104 Q_PROPERTY(bool canUndo READ canUndo NOTIFY canUndoChanged)
105 Q_PROPERTY(bool canRedo READ canRedo NOTIFY canRedoChanged)
106 Q_PROPERTY(bool inputMethodComposing READ isInputMethodComposing NOTIFY inputMethodComposingChanged)
107 Q_PROPERTY(qreal contentWidth READ contentWidth NOTIFY contentSizeChanged)
108 Q_PROPERTY(qreal contentHeight READ contentHeight NOTIFY contentSizeChanged)
109 Q_PROPERTY(RenderType renderType READ renderType WRITE setRenderType NOTIFY renderTypeChanged)
110
111 Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged REVISION 6)
112 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged REVISION 6)
113 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged REVISION 6)
114 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged REVISION 6)
115 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION 6)
116 QML_NAMED_ELEMENT(TextInput)
117
118public:
119 QQuickTextInput(QQuickItem * parent=nullptr);
120 ~QQuickTextInput();
121
122 void componentComplete() override;
123
124 enum EchoMode {//To match QLineEdit::EchoMode
125 Normal,
126 NoEcho,
127 Password,
128 PasswordEchoOnEdit
129 };
130 Q_ENUM(EchoMode)
131
132 enum HAlignment {
133 AlignLeft = Qt::AlignLeft,
134 AlignRight = Qt::AlignRight,
135 AlignHCenter = Qt::AlignHCenter
136 };
137 Q_ENUM(HAlignment)
138
139 enum VAlignment {
140 AlignTop = Qt::AlignTop,
141 AlignBottom = Qt::AlignBottom,
142 AlignVCenter = Qt::AlignVCenter
143 };
144 Q_ENUM(VAlignment)
145
146 enum WrapMode {
147 NoWrap = QTextOption::NoWrap,
148 WordWrap = QTextOption::WordWrap,
149 WrapAnywhere = QTextOption::WrapAnywhere,
150 WrapAtWordBoundaryOrAnywhere = QTextOption::WrapAtWordBoundaryOrAnywhere, // COMPAT
151 Wrap = QTextOption::WrapAtWordBoundaryOrAnywhere
152 };
153 Q_ENUM(WrapMode)
154
155 enum SelectionMode {
156 SelectCharacters,
157 SelectWords
158 };
159 Q_ENUM(SelectionMode)
160
161 enum CursorPosition {
162 CursorBetweenCharacters,
163 CursorOnCharacter
164 };
165 Q_ENUM(CursorPosition)
166
167 enum RenderType { QtRendering,
168 NativeRendering
169 };
170 Q_ENUM(RenderType)
171
172 //Auxilliary functions needed to control the TextInput from QML
173 Q_INVOKABLE void positionAt(QQmlV4Function *args) const;
174 Q_INVOKABLE QRectF positionToRectangle(int pos) const;
175 Q_INVOKABLE void moveCursorSelection(int pos);
176 Q_INVOKABLE void moveCursorSelection(int pos, SelectionMode mode);
177
178 RenderType renderType() const;
179 void setRenderType(RenderType renderType);
180
181 QString text() const;
182 void setText(const QString &);
183
184 int length() const;
185
186 QFont font() const;
187 void setFont(const QFont &font);
188
189 QColor color() const;
190 void setColor(const QColor &c);
191
192 QColor selectionColor() const;
193 void setSelectionColor(const QColor &c);
194
195 QColor selectedTextColor() const;
196 void setSelectedTextColor(const QColor &c);
197
198 HAlignment hAlign() const;
199 void setHAlign(HAlignment align);
200 void resetHAlign();
201 HAlignment effectiveHAlign() const;
202
203 VAlignment vAlign() const;
204 void setVAlign(VAlignment align);
205
206 WrapMode wrapMode() const;
207 void setWrapMode(WrapMode w);
208
209 bool isReadOnly() const;
210 void setReadOnly(bool);
211
212 bool isCursorVisible() const;
213 void setCursorVisible(bool on);
214
215 int cursorPosition() const;
216 void setCursorPosition(int cp);
217
218 QRectF cursorRectangle() const;
219
220 int selectionStart() const;
221 int selectionEnd() const;
222
223 QString selectedText() const;
224
225 int maxLength() const;
226 void setMaxLength(int ml);
227
228 QValidator * validator() const;
229 void setValidator(QValidator* v);
230
231 QString inputMask() const;
232 void setInputMask(const QString &im);
233
234 EchoMode echoMode() const;
235 void setEchoMode(EchoMode echo);
236
237 QString passwordCharacter() const;
238 void setPasswordCharacter(const QString &str);
239
240 int passwordMaskDelay() const;
241 void setPasswordMaskDelay(int delay);
242 void resetPasswordMaskDelay();
243
244 QString displayText() const;
245 Q_REVISION(7) QString preeditText() const;
246
247 QQmlComponent* cursorDelegate() const;
248 void setCursorDelegate(QQmlComponent*);
249
250 bool overwriteMode() const;
251 void setOverwriteMode(bool overwrite);
252
253 bool focusOnPress() const;
254 void setFocusOnPress(bool);
255
256 bool autoScroll() const;
257 void setAutoScroll(bool);
258
259 bool selectByMouse() const;
260 void setSelectByMouse(bool);
261
262 SelectionMode mouseSelectionMode() const;
263 void setMouseSelectionMode(SelectionMode mode);
264
265 bool persistentSelection() const;
266 void setPersistentSelection(bool persist);
267
268 bool hasAcceptableInput() const;
269
270#if QT_CONFIG(im)
271 QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
272 Q_REVISION(4) Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, const QVariant &argument) const;
273#endif
274
275 QRectF boundingRect() const override;
276 QRectF clipRect() const override;
277
278 bool canPaste() const;
279
280 bool canUndo() const;
281 bool canRedo() const;
282
283 bool isInputMethodComposing() const;
284
285 Qt::InputMethodHints inputMethodHints() const;
286 void setInputMethodHints(Qt::InputMethodHints hints);
287
288 Q_INVOKABLE QString getText(int start, int end) const;
289
290 qreal contentWidth() const;
291 qreal contentHeight() const;
292
293 qreal padding() const;
294 void setPadding(qreal padding);
295 void resetPadding();
296
297 qreal topPadding() const;
298 void setTopPadding(qreal padding);
299 void resetTopPadding();
300
301 qreal leftPadding() const;
302 void setLeftPadding(qreal padding);
303 void resetLeftPadding();
304
305 qreal rightPadding() const;
306 void setRightPadding(qreal padding);
307 void resetRightPadding();
308
309 qreal bottomPadding() const;
310 void setBottomPadding(qreal padding);
311 void resetBottomPadding();
312
313Q_SIGNALS:
314 void textChanged();
315 void cursorPositionChanged();
316 void cursorRectangleChanged();
317 void selectionStartChanged();
318 void selectionEndChanged();
319 void selectedTextChanged();
320 void accepted();
321 void acceptableInputChanged();
322 Q_REVISION(2) void editingFinished();
323 Q_REVISION(9) void textEdited();
324 void colorChanged();
325 void selectionColorChanged();
326 void selectedTextColorChanged();
327 void fontChanged(const QFont &font);
328 void horizontalAlignmentChanged(QQuickTextInput::HAlignment alignment);
329 void verticalAlignmentChanged(QQuickTextInput::VAlignment alignment);
330 void wrapModeChanged();
331 void readOnlyChanged(bool isReadOnly);
332 void cursorVisibleChanged(bool isCursorVisible);
333 void cursorDelegateChanged();
334 void overwriteModeChanged(bool overwriteMode);
335 void maximumLengthChanged(int maximumLength);
336 void validatorChanged();
337 void inputMaskChanged(const QString &inputMask);
338 void echoModeChanged(QQuickTextInput::EchoMode echoMode);
339 void passwordCharacterChanged();
340 Q_REVISION(4) void passwordMaskDelayChanged(int delay);
341 void displayTextChanged();
342 Q_REVISION(7) void preeditTextChanged();
343 void activeFocusOnPressChanged(bool activeFocusOnPress);
344 void autoScrollChanged(bool autoScroll);
345 void selectByMouseChanged(bool selectByMouse);
346 void mouseSelectionModeChanged(QQuickTextInput::SelectionMode mode);
347 void persistentSelectionChanged();
348 void canPasteChanged();
349 void canUndoChanged();
350 void canRedoChanged();
351 void inputMethodComposingChanged();
352 void effectiveHorizontalAlignmentChanged();
353 void contentSizeChanged();
354 void inputMethodHintsChanged();
355 void renderTypeChanged();
356 Q_REVISION(6) void paddingChanged();
357 Q_REVISION(6) void topPaddingChanged();
358 Q_REVISION(6) void leftPaddingChanged();
359 Q_REVISION(6) void rightPaddingChanged();
360 Q_REVISION(6) void bottomPaddingChanged();
361
362private:
363 void invalidateFontCaches();
364 void ensureActiveFocus(Qt::FocusReason reason);
365
366protected:
367 QQuickTextInput(QQuickTextInputPrivate &dd, QQuickItem *parent = nullptr);
368
369 void geometryChanged(const QRectF &newGeometry,
370 const QRectF &oldGeometry) override;
371
372 void mousePressEvent(QMouseEvent *event) override;
373 void mouseMoveEvent(QMouseEvent *event) override;
374 void mouseReleaseEvent(QMouseEvent *event) override;
375 void mouseDoubleClickEvent(QMouseEvent *event) override;
376 void keyPressEvent(QKeyEvent* ev) override;
377#if QT_CONFIG(im)
378 void inputMethodEvent(QInputMethodEvent *) override;
379#endif
380 void mouseUngrabEvent() override;
381 bool event(QEvent *e) override;
382 void focusOutEvent(QFocusEvent *event) override;
383 void focusInEvent(QFocusEvent *event) override;
384 void timerEvent(QTimerEvent *event) override;
385 QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) override;
386 void updatePolish() override;
387
388public Q_SLOTS:
389 void selectAll();
390 void selectWord();
391 void select(int start, int end);
392 void deselect();
393 bool isRightToLeft(int start, int end);
394#if QT_CONFIG(clipboard)
395 void cut();
396 void copy();
397 void paste();
398#endif
399 void undo();
400 void redo();
401 void insert(int position, const QString &text);
402 void remove(int start, int end);
403 Q_REVISION(4) void ensureVisible(int position);
404 Q_REVISION(7) void clear();
405
406private Q_SLOTS:
407 void selectionChanged();
408 void createCursor();
409 void updateCursorRectangle(bool scroll = true);
410 void q_canPasteChanged();
411 void q_updateAlignment();
412 void triggerPreprocess();
413
414#if QT_CONFIG(validator)
415 void q_validatorChanged();
416#endif
417
418private:
419 friend class QQuickTextUtil;
420
421 Q_DECLARE_PRIVATE(QQuickTextInput)
422};
423
424QT_END_NAMESPACE
425
426QML_DECLARE_TYPE(QQuickTextInput)
427
428#endif // QQUICKTEXTINPUT_P_H
429

source code of qtdeclarative/src/quick/items/qquicktextinput_p.h