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
48QT_BEGIN_NAMESPACE
49
50
51class QTextDocument;
52class QTextCursorPrivate;
53class QTextDocumentFragment;
54class QTextCharFormat;
55class QTextBlockFormat;
56class QTextListFormat;
57class QTextTableFormat;
58class QTextFrameFormat;
59class QTextImageFormat;
60class QTextDocumentPrivate;
61class QTextList;
62class QTextTable;
63class QTextFrame;
64class QTextBlock;
65
66class Q_GUI_EXPORT QTextCursor
67{
68public:
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 QTextCursor &operator=(QTextCursor &&other) noexcept { swap(other); return *this; }
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
228private:
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
237Q_DECLARE_SHARED(QTextCursor)
238
239QT_END_NAMESPACE
240
241#endif // QTEXTCURSOR_H
242