1
/****************************************************************************
2
**
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
6
**
7
** This file is part of the QtGui module of the Qt Toolkit.
8
**
9
** $QT_BEGIN_LICENSE:LGPL$
10
** GNU Lesser General Public License Usage
11
** This file may be used under the terms of the GNU Lesser General Public
12
** License version 2.1 as published by the Free Software Foundation and
13
** appearing in the file LICENSE.LGPL included in the packaging of this
14
** file. Please review the following information to ensure the GNU Lesser
15
** General Public License version 2.1 requirements will be met:
16
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17
**
18
** In addition, as a special exception, Nokia gives you certain additional
19
** rights. These rights are described in the Nokia Qt LGPL Exception
20
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21
**
22
** GNU General Public License Usage
23
** Alternatively, this file may be used under the terms of the GNU General
24
** Public License version 3.0 as published by the Free Software Foundation
25
** and appearing in the file LICENSE.GPL included in the packaging of this
26
** file. Please review the following information to ensure the GNU General
27
** Public License version 3.0 requirements will be met:
28
** http://www.gnu.org/copyleft/gpl.html.
29
**
30
** Other Usage
31
** Alternatively, this file may be used in accordance with the terms and
32
** conditions contained in a signed written agreement between you and Nokia.
33
**
34
**
35
**
36
**
37
**
38
** $QT_END_LICENSE$
39
**
40
****************************************************************************/
41
42
#ifndef QTEXTCURSOR_H
43
#define QTEXTCURSOR_H
44
45
#include <QtCore/qstring.h>
46
#include <QtCore/qshareddata.h>
47
#include <QtGui/qtextformat.h>
48
49
QT_BEGIN_HEADER
50
51
QT_BEGIN_NAMESPACE
52
53
QT_MODULE(Gui)
54
55
class QTextDocument;
56
class QTextCursorPrivate;
57
class QTextDocumentFragment;
58
class QTextCharFormat;
59
class QTextBlockFormat;
60
class QTextListFormat;
61
class QTextTableFormat;
62
class QTextFrameFormat;
63
class QTextImageFormat;
64
class QTextDocumentPrivate;
65
class QTextList;
66
class QTextTable;
67
class QTextFrame;
68
class QTextBlock;
69
70
class Q_GUI_EXPORT QTextCursor
71
{
72
public:
73
    QTextCursor();
74
    explicit QTextCursor(QTextDocument *document);
75
    QTextCursor(QTextDocumentPrivate *p, int pos);
76
    explicit QTextCursor(QTextFrame *frame);
77
    explicit QTextCursor(const QTextBlock &block);
78
    explicit QTextCursor(QTextCursorPrivate *d);
79
    QTextCursor(const QTextCursor &cursor);
80
    QTextCursor &operator=(const QTextCursor &other);
81
    ~QTextCursor();
82
83
    bool isNull() const;
84
85
    enum MoveMode {
86
        MoveAnchor,
87
        KeepAnchor
88
    };
89
90
    void setPosition(int pos, MoveMode mode = MoveAnchor);
91
    int position() const;
92
    int positionInBlock() const;
93
94
    int anchor() const;
95
96
    void insertText(const QString &text);
97
    void insertText(const QString &text, const QTextCharFormat &format);
98
99
    enum MoveOperation {
100
        NoMove,
101
102
        Start,
103
        Up,
104
        StartOfLine,
105
        StartOfBlock,
106
        StartOfWord,
107
        PreviousBlock,
108
        PreviousCharacter,
109
        PreviousWord,
110
        Left,
111
        WordLeft,
112
113
        End,
114
        Down,
115
        EndOfLine,
116
        EndOfWord,
117
        EndOfBlock,
118
        NextBlock,
119
        NextCharacter,
120
        NextWord,
121
        Right,
122
        WordRight,
123
124
        NextCell,
125
        PreviousCell,
126
        NextRow,
127
        PreviousRow
128
    };
129
130
    bool movePosition(MoveOperation op, MoveMode = MoveAnchor, int n = 1);
131
132
    bool visualNavigation() const;
133
    void setVisualNavigation(bool b);
134
135
    void setVerticalMovementX(int x);
136
    int verticalMovementX() const;
137
138
    void setKeepPositionOnInsert(bool b);
139
    bool keepPositionOnInsert() const;
140
141
    void deleteChar();
142
    void deletePreviousChar();
143
144
    enum SelectionType {
145
        WordUnderCursor,
146
        LineUnderCursor,
147
        BlockUnderCursor,
148
        Document
149
    };
150
    void select(SelectionType selection);
151
152
    bool hasSelection() const;
153
    bool hasComplexSelection() const;
154
    void removeSelectedText();
155
    void clearSelection();
156
    int selectionStart() const;
157
    int selectionEnd() const;
158
159
    QString selectedText() const;
160
    QTextDocumentFragment selection() const;
161
    void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns) const;
162
163
    QTextBlock block() const;
164
165
    QTextCharFormat charFormat() const;
166
    void setCharFormat(const QTextCharFormat &format);
167
    void mergeCharFormat(const QTextCharFormat &modifier);
168
169
    QTextBlockFormat blockFormat() const;
170
    void setBlockFormat(const QTextBlockFormat &format);
171
    void mergeBlockFormat(const QTextBlockFormat &modifier);
172
173
    QTextCharFormat blockCharFormat() const;
174
    void setBlockCharFormat(const QTextCharFormat &format);
175
    void mergeBlockCharFormat(const QTextCharFormat &modifier);
176
177
    bool atBlockStart() const;
178
    bool atBlockEnd() const;
179
    bool atStart() const;
180
    bool atEnd() const;
181
182
    void insertBlock();
183
    void insertBlock(const QTextBlockFormat &format);
184
    void insertBlock(const QTextBlockFormat &format, const QTextCharFormat &charFormat);
185
186
    QTextList *insertList(const QTextListFormat &format);
187
    QTextList *insertList(QTextListFormat::Style style);
188
189
    QTextList *createList(const QTextListFormat &format);
190
    QTextList *createList(QTextListFormat::Style style);
191
    QTextList *currentList() const;
192
193
    QTextTable *insertTable(int rows, int cols, const QTextTableFormat &format);
194
    QTextTable *insertTable(int rows, int cols);
195
    QTextTable *currentTable() const;
196
197
    QTextFrame *insertFrame(const QTextFrameFormat &format);
198
    QTextFrame *currentFrame() const;
199
200
    void insertFragment(const QTextDocumentFragment &fragment);
201
202
#ifndef QT_NO_TEXTHTMLPARSER
203
    void insertHtml(const QString &html);
204
#endif // QT_NO_TEXTHTMLPARSER
205
206
    void insertImage(const QTextImageFormat &format, QTextFrameFormat::Position alignment);
207
    void insertImage(const QTextImageFormat &format);
208
    void insertImage(const QString &name);
209
    void insertImage(const QImage &image, const QString &name = QString());
210
211
    void beginEditBlock();
212
    void joinPreviousEditBlock();
213
    void endEditBlock();
214
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
    bool operator>(const QTextCursor &rhs) const;
221
222
    bool isCopyOf(const QTextCursor &other) const;
223
224
    int blockNumber() const;
225
    int columnNumber() const;
226
227
    QTextDocument *document() const;
228
229
private:
230
    QSharedDataPointer<QTextCursorPrivate> d;
231
    friend class QTextDocumentFragmentPrivate;
232
    friend class QTextCopyHelper;
233
    friend class QTextControlPrivate;
234
};
235
236
QT_END_NAMESPACE
237
238
QT_END_HEADER
239
240
#endif // QTEXTCURSOR_H