1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://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 http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://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 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QTEXTEDIT_H
43 #define QTEXTEDIT_H
44 
45 #include <QtGui/qabstractscrollarea.h>
46 #include <QtGui/qtextdocument.h>
47 #include <QtGui/qtextoption.h>
48 #include <QtGui/qtextcursor.h>
49 #include <QtGui/qtextformat.h>
50 
51 #ifndef QT_NO_TEXTEDIT
52 
53 #ifdef QT3_SUPPORT
54 #include <QtGui/qtextobject.h>
55 #include <QtGui/qtextlayout.h>
56 #endif
57 
58 QT_BEGIN_HEADER
59 
60 QT_BEGIN_NAMESPACE
61 
62 QT_MODULE(Gui)
63 
64 class QStyleSheet;
65 class QTextDocument;
66 class QMenu;
67 class QTextEditPrivate;
68 class QMimeData;
69 
70 class Q_GUI_EXPORT QTextEdit : public QAbstractScrollArea
71 {
72     Q_OBJECT
73     Q_DECLARE_PRIVATE(QTextEdit)
74     Q_FLAGS(AutoFormatting)
75     Q_ENUMS(LineWrapMode)
76     Q_PROPERTY(AutoFormatting autoFormatting READ autoFormatting WRITE setAutoFormatting)
77     Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
78     Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
79     Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
80     Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
81     QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
82     Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth)
83     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
84 #ifndef QT_NO_TEXTHTMLPARSER
85     Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true)
86 #endif
87     Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText DESIGNABLE false)
88     Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
89     Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
90     Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)
91     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
92     Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags WRITE setTextInteractionFlags)
93 public:
94     enum LineWrapMode {
95         NoWrap,
96         WidgetWidth,
97         FixedPixelWidth,
98         FixedColumnWidth
99     };
100 
101     enum AutoFormattingFlag {
102         AutoNone = 0,
103         AutoBulletList = 0x00000001,
104         AutoAll = 0xffffffff
105     };
106 
107     Q_DECLARE_FLAGS(AutoFormatting, AutoFormattingFlag)
108 
109 #if defined(QT3_SUPPORT)
110     enum CursorAction {
111         MoveBackward,
112         MoveForward,
113         MoveWordBackward,
114         MoveWordForward,
115         MoveUp,
116         MoveDown,
117         MoveLineStart,
118         MoveLineEnd,
119         MoveHome,
120         MoveEnd,
121         MovePageUp,
122         MovePageDown
123 #if !defined(Q_MOC_RUN)
124         ,
125         MovePgUp = MovePageUp,
126         MovePgDown = MovePageDown
127 #endif
128     };
129 #endif
130 
131     explicit QTextEdit(QWidget *parent = 0);
132     explicit QTextEdit(const QString &text, QWidget *parent = 0);
133     virtual ~QTextEdit();
134 
135     void setDocument(QTextDocument *document);
136     QTextDocument *document() const;
137 
138     void setTextCursor(const QTextCursor &cursor);
139     QTextCursor textCursor() const;
140 
141     bool isReadOnly() const;
142     void setReadOnly(bool ro);
143 
144     void setTextInteractionFlags(Qt::TextInteractionFlags flags);
145     Qt::TextInteractionFlags textInteractionFlags() const;
146 
147     qreal fontPointSize() const;
148     QString fontFamily() const;
149     int fontWeight() const;
150     bool fontUnderline() const;
151     bool fontItalic() const;
152     QColor textColor() const;
153     QColor textBackgroundColor() const;
154     QFont currentFont() const;
155     Qt::Alignment alignment() const;
156 
157     void mergeCurrentCharFormat(const QTextCharFormat &modifier);
158 
159     void setCurrentCharFormat(const QTextCharFormat &format);
160     QTextCharFormat currentCharFormat() const;
161 
162     AutoFormatting autoFormatting() const;
163     void setAutoFormatting(AutoFormatting features);
164 
165     bool tabChangesFocus() const;
166     void setTabChangesFocus(bool b);
167 
setDocumentTitle(const QString & title)168     inline void setDocumentTitle(const QString &title)
169     { document()->setMetaInformation(QTextDocument::DocumentTitle, title); }
documentTitle()170     inline QString documentTitle() const
171     { return document()->metaInformation(QTextDocument::DocumentTitle); }
172 
isUndoRedoEnabled()173     inline bool isUndoRedoEnabled() const
174     { return document()->isUndoRedoEnabled(); }
setUndoRedoEnabled(bool enable)175     inline void setUndoRedoEnabled(bool enable)
176     { document()->setUndoRedoEnabled(enable); }
177 
178     LineWrapMode lineWrapMode() const;
179     void setLineWrapMode(LineWrapMode mode);
180 
181     int lineWrapColumnOrWidth() const;
182     void setLineWrapColumnOrWidth(int w);
183 
184     QTextOption::WrapMode wordWrapMode() const;
185     void setWordWrapMode(QTextOption::WrapMode policy);
186 
187     bool find(const QString &exp, QTextDocument::FindFlags options = 0);
188 
toPlainText()189     inline QString toPlainText() const
190     { return document()->toPlainText(); }
191 #ifndef QT_NO_TEXTHTMLPARSER
toHtml()192     inline QString toHtml() const
193     { return document()->toHtml(); }
194 #endif
195 
196     void ensureCursorVisible();
197 
198     virtual QVariant loadResource(int type, const QUrl &name);
199 #ifndef QT_NO_CONTEXTMENU
200     QMenu *createStandardContextMenu();
201     QMenu *createStandardContextMenu(const QPoint &position);
202 #endif
203 
204     QTextCursor cursorForPosition(const QPoint &pos) const;
205     QRect cursorRect(const QTextCursor &cursor) const;
206     QRect cursorRect() const;
207 
208     QString anchorAt(const QPoint& pos) const;
209 
210     bool overwriteMode() const;
211     void setOverwriteMode(bool overwrite);
212 
213     int tabStopWidth() const;
214     void setTabStopWidth(int width);
215 
216     int cursorWidth() const;
217     void setCursorWidth(int width);
218 
219     bool acceptRichText() const;
220     void setAcceptRichText(bool accept);
221 
222     struct ExtraSelection
223     {
224         QTextCursor cursor;
225         QTextCharFormat format;
226     };
227     void setExtraSelections(const QList<ExtraSelection> &selections);
228     QList<ExtraSelection> extraSelections() const;
229 
230     void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
231 
232     bool canPaste() const;
233 
234 #ifndef QT_NO_PRINTER
235     void print(QPrinter *printer) const;
236 #endif
237 
238 public Q_SLOTS:
239     void setFontPointSize(qreal s);
240     void setFontFamily(const QString &fontFamily);
241     void setFontWeight(int w);
242     void setFontUnderline(bool b);
243     void setFontItalic(bool b);
244     void setTextColor(const QColor &c);
245     void setTextBackgroundColor(const QColor &c);
246     void setCurrentFont(const QFont &f);
247     void setAlignment(Qt::Alignment a);
248 
249     void setPlainText(const QString &text);
250 #ifndef QT_NO_TEXTHTMLPARSER
251     void setHtml(const QString &text);
252 #endif
253     void setText(const QString &text);
254 
255 #ifndef QT_NO_CLIPBOARD
256     void cut();
257     void copy();
258     void paste();
259 #endif
260 
261     void undo();
262     void redo();
263 
264     void clear();
265     void selectAll();
266 
267     void insertPlainText(const QString &text);
268 #ifndef QT_NO_TEXTHTMLPARSER
269     void insertHtml(const QString &text);
270 #endif // QT_NO_TEXTHTMLPARSER
271 
272     void append(const QString &text);
273 
274     void scrollToAnchor(const QString &name);
275 
276     void zoomIn(int range = 1);
277     void zoomOut(int range = 1);
278 
279 Q_SIGNALS:
280     void textChanged();
281     void undoAvailable(bool b);
282     void redoAvailable(bool b);
283     void currentCharFormatChanged(const QTextCharFormat &format);
284     void copyAvailable(bool b);
285     void selectionChanged();
286     void cursorPositionChanged();
287 
288 protected:
289     virtual bool event(QEvent *e);
290     virtual void timerEvent(QTimerEvent *e);
291     virtual void keyPressEvent(QKeyEvent *e);
292     virtual void keyReleaseEvent(QKeyEvent *e);
293     virtual void resizeEvent(QResizeEvent *e);
294     virtual void paintEvent(QPaintEvent *e);
295     virtual void mousePressEvent(QMouseEvent *e);
296     virtual void mouseMoveEvent(QMouseEvent *e);
297     virtual void mouseReleaseEvent(QMouseEvent *e);
298     virtual void mouseDoubleClickEvent(QMouseEvent *e);
299     virtual bool focusNextPrevChild(bool next);
300 #ifndef QT_NO_CONTEXTMENU
301     virtual void contextMenuEvent(QContextMenuEvent *e);
302 #endif
303 #ifndef QT_NO_DRAGANDDROP
304     virtual void dragEnterEvent(QDragEnterEvent *e);
305     virtual void dragLeaveEvent(QDragLeaveEvent *e);
306     virtual void dragMoveEvent(QDragMoveEvent *e);
307     virtual void dropEvent(QDropEvent *e);
308 #endif
309     virtual void focusInEvent(QFocusEvent *e);
310     virtual void focusOutEvent(QFocusEvent *e);
311     virtual void showEvent(QShowEvent *);
312     virtual void changeEvent(QEvent *e);
313 #ifndef QT_NO_WHEELEVENT
314     virtual void wheelEvent(QWheelEvent *e);
315 #endif
316 
317     virtual QMimeData *createMimeDataFromSelection() const;
318     virtual bool canInsertFromMimeData(const QMimeData *source) const;
319     virtual void insertFromMimeData(const QMimeData *source);
320 
321     virtual void inputMethodEvent(QInputMethodEvent *);
322     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
323 
324     QTextEdit(QTextEditPrivate &dd, QWidget *parent);
325 
326     virtual void scrollContentsBy(int dx, int dy);
327 
328 #ifdef QT3_SUPPORT
329 Q_SIGNALS:
330     QT_MOC_COMPAT void currentFontChanged(const QFont &f);
331     QT_MOC_COMPAT void currentColorChanged(const QColor &c);
332 
333 public:
334     QT3_SUPPORT_CONSTRUCTOR QTextEdit(QWidget *parent, const char *name);
find(const QString & exp,bool cs,bool wo)335     inline QT3_SUPPORT bool find(const QString &exp, bool cs, bool wo)
336     {
337         QTextDocument::FindFlags flags = 0;
338         if (cs)
339             flags |= QTextDocument::FindCaseSensitively;
340         if (wo)
341             flags |= QTextDocument::FindWholeWords;
342         return find(exp, flags);
343     }
344 
sync()345     inline QT3_SUPPORT void sync() {}
346 
347     QT3_SUPPORT void moveCursor(CursorAction action, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
348     QT3_SUPPORT void moveCursor(CursorAction action, bool select);
349 
350     enum KeyboardAction {
351         ActionBackspace,
352         ActionDelete,
353         ActionReturn,
354         ActionKill,
355         ActionWordBackspace,
356         ActionWordDelete
357     };
358 
359     QT3_SUPPORT void doKeyboardAction(KeyboardAction action);
360 
361     QT3_SUPPORT QString text() const;
362     QT3_SUPPORT void setTextFormat(Qt::TextFormat);
363     QT3_SUPPORT Qt::TextFormat textFormat() const;
364 
setBold(bool b)365     inline QT3_SUPPORT void setBold(bool b) { setFontWeight(b ? QFont::Bold : QFont::Normal); }
setUnderline(bool b)366     inline QT3_SUPPORT void setUnderline(bool b) { setFontUnderline(b); }
setItalic(bool i)367     inline QT3_SUPPORT void setItalic(bool i) { setFontItalic(i); }
setFamily(const QString & family)368     inline QT3_SUPPORT void setFamily(const QString &family) { setFontFamily(family); }
setPointSize(int size)369     inline QT3_SUPPORT void setPointSize(int size) { setFontPointSize(size); }
370 
italic()371     inline QT3_SUPPORT bool italic() const { return fontItalic(); }
bold()372     inline QT3_SUPPORT bool bold() const { return fontWeight() >= QFont::Bold; }
underline()373     inline QT3_SUPPORT bool underline() const { return fontUnderline(); }
family()374     inline QT3_SUPPORT QString family() const { return fontFamily(); }
pointSize()375     inline QT3_SUPPORT int pointSize() const { return (int)(fontPointSize()+0.5); }
376 
hasSelectedText()377     inline QT3_SUPPORT bool hasSelectedText() const
378     { return textCursor().hasSelection(); }
selectedText()379     inline QT3_SUPPORT QString selectedText() const
380     { return textCursor().selectedText(); }
381 
isUndoAvailable()382     inline QT3_SUPPORT bool isUndoAvailable() const
383     { return document()->isUndoAvailable(); }
isRedoAvailable()384     inline QT3_SUPPORT bool isRedoAvailable() const
385     { return document()->isRedoAvailable(); }
386 
insert(const QString & text)387     inline QT3_SUPPORT void insert(const QString &text)
388     { insertPlainText(text); }
389 
isModified()390     inline QT3_SUPPORT bool isModified() const
391     { return document()->isModified(); }
392 
color()393     inline QT3_SUPPORT QColor color() const
394     { return textColor(); }
395 
396 public Q_SLOTS:
397     inline QT_MOC_COMPAT void setModified(bool m = true)
398     { document()->setModified(m); }
399 public:
undo()400     inline QT3_SUPPORT void undo() const
401     { document()->undo(); }
redo()402     inline QT3_SUPPORT void redo() const
403     { document()->redo(); }
404 
405 public Q_SLOTS:
setColor(const QColor & c)406     inline QT_MOC_COMPAT void setColor(const QColor &c)
407     { setTextColor(c); }
408 
409 #endif
410 
411 private:
412     Q_DISABLE_COPY(QTextEdit)
413     Q_PRIVATE_SLOT(d_func(), void _q_repaintContents(const QRectF &r))
414     Q_PRIVATE_SLOT(d_func(), void _q_currentCharFormatChanged(const QTextCharFormat &))
415     Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
416     Q_PRIVATE_SLOT(d_func(), void _q_ensureVisible(const QRectF &))
417     friend class QTextEditControl;
418     friend class QTextDocument;
419     friend class QTextControl;
420 };
421 
422 Q_DECLARE_OPERATORS_FOR_FLAGS(QTextEdit::AutoFormatting)
423 
424 QT_END_NAMESPACE
425 
426 QT_END_HEADER
427 
428 #endif // QT_NO_TEXTEDIT
429 
430 #endif // QTEXTEDIT_H
431