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 QtGui 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 QTEXTCURSOR_H |
41 | #define QTEXTCURSOR_H |
42 | |
43 | #include <QtGui/qtguiglobal.h> |
44 | #include <QtCore/qstring.h> |
45 | #include <QtCore/qshareddata.h> |
46 | #include <QtGui/qtextformat.h> |
47 | |
48 | QT_BEGIN_NAMESPACE |
49 | |
50 | |
51 | class QTextDocument; |
52 | class QTextCursorPrivate; |
53 | class QTextDocumentFragment; |
54 | class QTextCharFormat; |
55 | class QTextBlockFormat; |
56 | class QTextListFormat; |
57 | class QTextTableFormat; |
58 | class QTextFrameFormat; |
59 | class QTextImageFormat; |
60 | class QTextDocumentPrivate; |
61 | class QTextList; |
62 | class QTextTable; |
63 | class QTextFrame; |
64 | class QTextBlock; |
65 | |
66 | class Q_GUI_EXPORT QTextCursor |
67 | { |
68 | public: |
69 | QTextCursor(); |
70 | explicit QTextCursor(QTextDocument *document); |
71 | QTextCursor(QTextDocumentPrivate *p, int pos); |
72 | explicit QTextCursor(QTextCursorPrivate *d); |
73 | explicit QTextCursor(QTextFrame *frame); |
74 | explicit QTextCursor(const QTextBlock &block); |
75 | QTextCursor(const QTextCursor &cursor); |
76 | QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QTextCursor) |
77 | QTextCursor &operator=(const QTextCursor &other); |
78 | ~QTextCursor(); |
79 | |
80 | void swap(QTextCursor &other) noexcept { qSwap(d, other.d); } |
81 | |
82 | bool isNull() const; |
83 | |
84 | enum MoveMode { |
85 | MoveAnchor, |
86 | KeepAnchor |
87 | }; |
88 | |
89 | void setPosition(int pos, MoveMode mode = MoveAnchor); |
90 | int position() const; |
91 | int positionInBlock() const; |
92 | |
93 | int anchor() const; |
94 | |
95 | void insertText(const QString &text); |
96 | void insertText(const QString &text, const QTextCharFormat &format); |
97 | |
98 | enum MoveOperation { |
99 | NoMove, |
100 | |
101 | Start, |
102 | Up, |
103 | StartOfLine, |
104 | StartOfBlock, |
105 | StartOfWord, |
106 | PreviousBlock, |
107 | PreviousCharacter, |
108 | PreviousWord, |
109 | Left, |
110 | WordLeft, |
111 | |
112 | End, |
113 | Down, |
114 | EndOfLine, |
115 | EndOfWord, |
116 | EndOfBlock, |
117 | NextBlock, |
118 | NextCharacter, |
119 | NextWord, |
120 | Right, |
121 | WordRight, |
122 | |
123 | NextCell, |
124 | PreviousCell, |
125 | NextRow, |
126 | PreviousRow |
127 | }; |
128 | |
129 | bool movePosition(MoveOperation op, MoveMode = MoveAnchor, int n = 1); |
130 | |
131 | bool visualNavigation() const; |
132 | void setVisualNavigation(bool b); |
133 | |
134 | void setVerticalMovementX(int x); |
135 | int verticalMovementX() const; |
136 | |
137 | void setKeepPositionOnInsert(bool b); |
138 | bool keepPositionOnInsert() const; |
139 | |
140 | void deleteChar(); |
141 | void deletePreviousChar(); |
142 | |
143 | enum SelectionType { |
144 | WordUnderCursor, |
145 | LineUnderCursor, |
146 | BlockUnderCursor, |
147 | Document |
148 | }; |
149 | void select(SelectionType selection); |
150 | |
151 | bool hasSelection() const; |
152 | bool hasComplexSelection() const; |
153 | void removeSelectedText(); |
154 | void clearSelection(); |
155 | int selectionStart() const; |
156 | int selectionEnd() const; |
157 | |
158 | QString selectedText() const; |
159 | QTextDocumentFragment selection() const; |
160 | void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns) const; |
161 | |
162 | QTextBlock block() const; |
163 | |
164 | QTextCharFormat charFormat() const; |
165 | void setCharFormat(const QTextCharFormat &format); |
166 | void mergeCharFormat(const QTextCharFormat &modifier); |
167 | |
168 | QTextBlockFormat blockFormat() const; |
169 | void setBlockFormat(const QTextBlockFormat &format); |
170 | void mergeBlockFormat(const QTextBlockFormat &modifier); |
171 | |
172 | QTextCharFormat blockCharFormat() const; |
173 | void setBlockCharFormat(const QTextCharFormat &format); |
174 | void mergeBlockCharFormat(const QTextCharFormat &modifier); |
175 | |
176 | bool atBlockStart() const; |
177 | bool atBlockEnd() const; |
178 | bool atStart() const; |
179 | bool atEnd() const; |
180 | |
181 | void insertBlock(); |
182 | void insertBlock(const QTextBlockFormat &format); |
183 | void insertBlock(const QTextBlockFormat &format, const QTextCharFormat &charFormat); |
184 | |
185 | QTextList *insertList(const QTextListFormat &format); |
186 | QTextList *insertList(QTextListFormat::Style style); |
187 | |
188 | QTextList *createList(const QTextListFormat &format); |
189 | QTextList *createList(QTextListFormat::Style style); |
190 | QTextList *currentList() const; |
191 | |
192 | QTextTable *insertTable(int rows, int cols, const QTextTableFormat &format); |
193 | QTextTable *insertTable(int rows, int cols); |
194 | QTextTable *currentTable() const; |
195 | |
196 | QTextFrame *insertFrame(const QTextFrameFormat &format); |
197 | QTextFrame *currentFrame() const; |
198 | |
199 | void insertFragment(const QTextDocumentFragment &fragment); |
200 | |
201 | #ifndef QT_NO_TEXTHTMLPARSER |
202 | void insertHtml(const QString &html); |
203 | #endif // QT_NO_TEXTHTMLPARSER |
204 | |
205 | void insertImage(const QTextImageFormat &format, QTextFrameFormat::Position alignment); |
206 | void insertImage(const QTextImageFormat &format); |
207 | void insertImage(const QString &name); |
208 | void insertImage(const QImage &image, const QString &name = QString()); |
209 | |
210 | void beginEditBlock(); |
211 | void joinPreviousEditBlock(); |
212 | void endEditBlock(); |
213 | |
214 | bool operator!=(const QTextCursor &rhs) const; |
215 | bool operator<(const QTextCursor &rhs) const; |
216 | bool operator<=(const QTextCursor &rhs) const; |
217 | bool operator==(const QTextCursor &rhs) const; |
218 | bool operator>=(const QTextCursor &rhs) const; |
219 | bool operator>(const QTextCursor &rhs) const; |
220 | |
221 | bool isCopyOf(const QTextCursor &other) const; |
222 | |
223 | int blockNumber() const; |
224 | int columnNumber() const; |
225 | |
226 | QTextDocument *document() const; |
227 | |
228 | private: |
229 | QSharedDataPointer<QTextCursorPrivate> d; |
230 | friend class QTextCursorPrivate; |
231 | friend class QTextDocumentPrivate; |
232 | friend class QTextDocumentFragmentPrivate; |
233 | friend class QTextCopyHelper; |
234 | friend class QWidgetTextControlPrivate; |
235 | }; |
236 | |
237 | Q_DECLARE_SHARED(QTextCursor) |
238 | |
239 | QT_END_NAMESPACE |
240 | |
241 | #endif // QTEXTCURSOR_H |
242 | |