forked from Andersbakken/LazyTextEdit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtextedit.h
181 lines (150 loc) · 6.17 KB
/
textedit.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
// Copyright 2010 Anders Bakken
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
#include <QtGui>
#include <QAbstractScrollArea>
#include "textdocument.h"
#include "textcursor.h"
#include "textsection.h"
#include "syntaxhighlighter.h"
class TextEditPrivate;
class TextEdit : public QAbstractScrollArea
{
Q_OBJECT
Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly)
Q_PROPERTY(bool cursorVisible READ cursorVisible WRITE setCursorVisible)
Q_PROPERTY(QString selectedText READ selectedText)
Q_PROPERTY(bool undoAvailable READ isUndoAvailable NOTIFY undoAvailableChanged)
Q_PROPERTY(bool redoAvailable READ isRedoAvailable NOTIFY redoAvailableChanged)
Q_PROPERTY(int maximumSizeCopy READ maximumSizeCopy WRITE setMaximumSizeCopy)
Q_PROPERTY(bool lineBreaking READ lineBreaking WRITE setLineBreaking)
public:
TextEdit(QWidget *parent = 0);
~TextEdit();
TextDocument *document() const;
void setDocument(TextDocument *doc);
int cursorWidth() const;
void setCursorWidth(int cc);
struct ExtraSelection
{
TextCursor cursor;
QTextCharFormat format;
};
void setExtraSelections(const QList<ExtraSelection> &selections);
QList<ExtraSelection> extraSelections() const;
void setSyntaxHighlighter(SyntaxHighlighter *h);
inline SyntaxHighlighter *syntaxHighlighter() const { return syntaxHighlighters().value(0); }
QList<SyntaxHighlighter*> syntaxHighlighters() const;
void addSyntaxHighlighter(SyntaxHighlighter *highlighter);
void takeSyntaxHighlighter(SyntaxHighlighter *highlighter);
void removeSyntaxHighlighter(SyntaxHighlighter *highlighter);
void clearSyntaxHighlighters();
bool load(QIODevice *device, TextDocument::DeviceMode mode = TextDocument::Sparse, QTextCodec *codec = 0);
bool load(const QString &fileName, TextDocument::DeviceMode mode = TextDocument::Sparse, QTextCodec *codec = 0);
void paintEvent(QPaintEvent *e);
void scrollContentsBy(int dx, int dy);
bool moveCursorPosition(TextCursor::MoveOperation op, TextCursor::MoveMode = TextCursor::MoveAnchor, int n = 1);
void setCursorPosition(int pos, TextCursor::MoveMode mode = TextCursor::MoveAnchor);
int viewportPosition() const;
int cursorPosition() const;
int textPositionAt(const QPoint &pos) const;
bool readOnly() const;
void setReadOnly(bool rr);
bool lineBreaking() const;
void setLineBreaking(bool lb);
int maximumSizeCopy() const;
void setMaximumSizeCopy(int max);
QRect cursorBlockRect(const TextCursor &cursor) const;
QRect cursorRect(const TextCursor &cursor) const;
int lineNumber(int position) const;
int columnNumber(int position) const;
int lineNumber(const TextCursor &cursor) const;
int columnNumber(const TextCursor &cursor) const;
bool cursorVisible() const;
void setCursorVisible(bool cc);
QString selectedText() const;
bool hasSelection() const;
bool save(QIODevice *device);
bool save();
bool save(const QString &file);
void setText(const QString &text);
QString read(int pos, int size) const;
QChar readCharacter(int index) const;
void insert(int pos, const QString &text);
void remove(int from, int size);
TextCursor &textCursor();
const TextCursor &textCursor() const;
void setTextCursor(const TextCursor &textCursor);
TextCursor cursorForPosition(const QPoint &pos) const;
TextSection *sectionAt(const QPoint &pos) const;
QList<TextSection*> sections(int from = 0, int size = -1, TextSection::TextSectionOptions opt = 0) const;
inline TextSection *sectionAt(int pos) const { return sections(pos, 1, TextSection::IncludePartial).value(0); }
TextSection *insertTextSection(int pos, int size, const QTextCharFormat &format = QTextCharFormat(),
const QVariant &data = QVariant());
void ensureCursorVisible(const TextCursor &cursor, int linesMargin = 0);
bool isUndoAvailable() const;
bool isRedoAvailable() const;
enum ActionType {
CopyAction,
PasteAction,
CutAction,
UndoAction,
RedoAction,
SelectAllAction
};
QAction *action(ActionType type) const;
public slots:
void ensureCursorVisible();
void append(const QString &text);
void removeSelectedText();
void copy(QClipboard::Mode mode = QClipboard::Clipboard);
void paste(QClipboard::Mode mode = QClipboard::Clipboard);
void cut();
void undo();
void redo();
void selectAll();
void clearSelection();
signals:
void copyAvailable(bool on);
void textChanged();
void selectionChanged();
void cursorPositionChanged(int pos);
void sectionClicked(TextSection *section, const QPoint &pos);
void undoAvailableChanged(bool on);
void redoAvailableChanged(bool on);
protected:
virtual void paste(int position, QClipboard::Mode mode);
virtual void changeEvent(QEvent *e);
virtual void keyPressEvent(QKeyEvent *e);
virtual void keyReleaseEvent(QKeyEvent *e);
virtual void wheelEvent(QWheelEvent *e);
virtual void mousePressEvent(QMouseEvent *e);
virtual void mouseDoubleClickEvent(QMouseEvent *);
virtual void mouseMoveEvent(QMouseEvent *e);
virtual void mouseReleaseEvent(QMouseEvent *e);
virtual void resizeEvent(QResizeEvent *e);
#if 0 // ### not done yet
virtual void dragEnterEvent(QDragEnterEvent *e);
virtual void dragMoveEvent(QDragMoveEvent *e);
virtual void dropEvent(QDropEvent *e);
#endif
private:
TextEditPrivate *d;
friend class TextLayoutCacheManager;
friend class TextEditPrivate;
friend class TextCursor;
};
#endif