Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-18 09:27:00

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QPLAINTEXTEDIT_H
0006 #define QPLAINTEXTEDIT_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qtextedit.h>
0010 
0011 #include <QtWidgets/qabstractscrollarea.h>
0012 #include <QtGui/qtextdocument.h>
0013 #include <QtGui/qtextoption.h>
0014 #include <QtGui/qtextcursor.h>
0015 #include <QtGui/qtextformat.h>
0016 #include <QtGui/qabstracttextdocumentlayout.h>
0017 
0018 QT_REQUIRE_CONFIG(textedit);
0019 
0020 QT_BEGIN_NAMESPACE
0021 
0022 class QStyleSheet;
0023 class QTextDocument;
0024 class QMenu;
0025 class QPlainTextEditPrivate;
0026 class QMimeData;
0027 class QPagedPaintDevice;
0028 class QRegularExpression;
0029 
0030 class Q_WIDGETS_EXPORT QPlainTextEdit : public QAbstractScrollArea
0031 {
0032     Q_OBJECT
0033     Q_DECLARE_PRIVATE(QPlainTextEdit)
0034     Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
0035     Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
0036     Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
0037     Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
0038     QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
0039     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
0040     Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true)
0041     Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
0042     Q_PROPERTY(qreal tabStopDistance READ tabStopDistance WRITE setTabStopDistance)
0043     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
0044     Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags
0045                WRITE setTextInteractionFlags)
0046     Q_PROPERTY(int blockCount READ blockCount)
0047     Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
0048     Q_PROPERTY(bool backgroundVisible READ backgroundVisible WRITE setBackgroundVisible)
0049     Q_PROPERTY(bool centerOnScroll READ centerOnScroll WRITE setCenterOnScroll)
0050     Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
0051 public:
0052     enum LineWrapMode {
0053         NoWrap,
0054         WidgetWidth
0055     };
0056     Q_ENUM(LineWrapMode)
0057 
0058     explicit QPlainTextEdit(QWidget *parent = nullptr);
0059     explicit QPlainTextEdit(const QString &text, QWidget *parent = nullptr);
0060     virtual ~QPlainTextEdit();
0061 
0062     void setDocument(QTextDocument *document);
0063     QTextDocument *document() const;
0064 
0065     void setPlaceholderText(const QString &placeholderText);
0066     QString placeholderText() const;
0067 
0068     void setTextCursor(const QTextCursor &cursor);
0069     QTextCursor textCursor() const;
0070 
0071     bool isReadOnly() const;
0072     void setReadOnly(bool ro);
0073 
0074     void setTextInteractionFlags(Qt::TextInteractionFlags flags);
0075     Qt::TextInteractionFlags textInteractionFlags() const;
0076 
0077     void mergeCurrentCharFormat(const QTextCharFormat &modifier);
0078     void setCurrentCharFormat(const QTextCharFormat &format);
0079     QTextCharFormat currentCharFormat() const;
0080 
0081     bool tabChangesFocus() const;
0082     void setTabChangesFocus(bool b);
0083 
0084     inline void setDocumentTitle(const QString &title)
0085     { document()->setMetaInformation(QTextDocument::DocumentTitle, title); }
0086     inline QString documentTitle() const
0087     { return document()->metaInformation(QTextDocument::DocumentTitle); }
0088 
0089     inline bool isUndoRedoEnabled() const
0090     { return document()->isUndoRedoEnabled(); }
0091     inline void setUndoRedoEnabled(bool enable)
0092     { document()->setUndoRedoEnabled(enable); }
0093 
0094     inline void setMaximumBlockCount(int maximum)
0095     { document()->setMaximumBlockCount(maximum); }
0096     inline int maximumBlockCount() const
0097     { return document()->maximumBlockCount(); }
0098 
0099 
0100     LineWrapMode lineWrapMode() const;
0101     void setLineWrapMode(LineWrapMode mode);
0102 
0103     QTextOption::WrapMode wordWrapMode() const;
0104     void setWordWrapMode(QTextOption::WrapMode policy);
0105 
0106     void setBackgroundVisible(bool visible);
0107     bool backgroundVisible() const;
0108 
0109     void setCenterOnScroll(bool enabled);
0110     bool centerOnScroll() const;
0111 
0112     bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
0113 #if QT_CONFIG(regularexpression)
0114     bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags());
0115 #endif
0116 
0117     inline QString toPlainText() const
0118     { return document()->toPlainText(); }
0119 
0120     void ensureCursorVisible();
0121 
0122     virtual QVariant loadResource(int type, const QUrl &name);
0123 #ifndef QT_NO_CONTEXTMENU
0124     QMenu *createStandardContextMenu();
0125     QMenu *createStandardContextMenu(const QPoint &position);
0126 #endif
0127 
0128     QTextCursor cursorForPosition(const QPoint &pos) const;
0129     QRect cursorRect(const QTextCursor &cursor) const;
0130     QRect cursorRect() const;
0131 
0132     QString anchorAt(const QPoint &pos) const;
0133 
0134     bool overwriteMode() const;
0135     void setOverwriteMode(bool overwrite);
0136 
0137     qreal tabStopDistance() const;
0138     void setTabStopDistance(qreal distance);
0139 
0140     int cursorWidth() const;
0141     void setCursorWidth(int width);
0142 
0143     void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections);
0144     QList<QTextEdit::ExtraSelection> extraSelections() const;
0145 
0146     void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
0147 
0148     bool canPaste() const;
0149 
0150     void print(QPagedPaintDevice *printer) const;
0151 
0152     int blockCount() const;
0153     QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
0154     Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
0155 
0156 public Q_SLOTS:
0157 
0158     void setPlainText(const QString &text);
0159 
0160 #ifndef QT_NO_CLIPBOARD
0161     void cut();
0162     void copy();
0163     void paste();
0164 #endif
0165 
0166     void undo();
0167     void redo();
0168 
0169     void clear();
0170     void selectAll();
0171 
0172     void insertPlainText(const QString &text);
0173 
0174     void appendPlainText(const QString &text);
0175     void appendHtml(const QString &html);
0176 
0177     void centerCursor();
0178 
0179     void zoomIn(int range = 1);
0180     void zoomOut(int range = 1);
0181 
0182 Q_SIGNALS:
0183     void textChanged();
0184     void undoAvailable(bool b);
0185     void redoAvailable(bool b);
0186     void copyAvailable(bool b);
0187     void selectionChanged();
0188     void cursorPositionChanged();
0189 
0190     void updateRequest(const QRect &rect, int dy);
0191     void blockCountChanged(int newBlockCount);
0192     void modificationChanged(bool);
0193 
0194 protected:
0195     virtual bool event(QEvent *e) override;
0196     virtual void timerEvent(QTimerEvent *e) override;
0197     virtual void keyPressEvent(QKeyEvent *e) override;
0198     virtual void keyReleaseEvent(QKeyEvent *e) override;
0199     virtual void resizeEvent(QResizeEvent *e) override;
0200     virtual void paintEvent(QPaintEvent *e) override;
0201     virtual void mousePressEvent(QMouseEvent *e) override;
0202     virtual void mouseMoveEvent(QMouseEvent *e) override;
0203     virtual void mouseReleaseEvent(QMouseEvent *e) override;
0204     virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
0205     virtual bool focusNextPrevChild(bool next) override;
0206 #ifndef QT_NO_CONTEXTMENU
0207     virtual void contextMenuEvent(QContextMenuEvent *e) override;
0208 #endif
0209 #if QT_CONFIG(draganddrop)
0210     virtual void dragEnterEvent(QDragEnterEvent *e) override;
0211     virtual void dragLeaveEvent(QDragLeaveEvent *e) override;
0212     virtual void dragMoveEvent(QDragMoveEvent *e) override;
0213     virtual void dropEvent(QDropEvent *e) override;
0214 #endif
0215     virtual void focusInEvent(QFocusEvent *e) override;
0216     virtual void focusOutEvent(QFocusEvent *e) override;
0217     virtual void showEvent(QShowEvent *) override;
0218     virtual void changeEvent(QEvent *e) override;
0219 #if QT_CONFIG(wheelevent)
0220     virtual void wheelEvent(QWheelEvent *e) override;
0221 #endif
0222 
0223     virtual QMimeData *createMimeDataFromSelection() const;
0224     virtual bool canInsertFromMimeData(const QMimeData *source) const;
0225     virtual void insertFromMimeData(const QMimeData *source);
0226 
0227     virtual void inputMethodEvent(QInputMethodEvent *) override;
0228 
0229     QPlainTextEdit(QPlainTextEditPrivate &dd, QWidget *parent);
0230 
0231     virtual void scrollContentsBy(int dx, int dy) override;
0232     virtual void doSetTextCursor(const QTextCursor &cursor);
0233 
0234     QTextBlock firstVisibleBlock() const;
0235     QPointF contentOffset() const;
0236     QRectF blockBoundingRect(const QTextBlock &block) const;
0237     QRectF blockBoundingGeometry(const QTextBlock &block) const;
0238     QAbstractTextDocumentLayout::PaintContext getPaintContext() const;
0239 
0240     void zoomInF(float range);
0241 
0242 private:
0243     Q_DISABLE_COPY(QPlainTextEdit)
0244 
0245     friend class QPlainTextEditControl;
0246 };
0247 
0248 
0249 class QPlainTextDocumentLayoutPrivate;
0250 class Q_WIDGETS_EXPORT QPlainTextDocumentLayout : public QAbstractTextDocumentLayout
0251 {
0252     Q_OBJECT
0253     Q_DECLARE_PRIVATE(QPlainTextDocumentLayout)
0254     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
0255 
0256 public:
0257     QPlainTextDocumentLayout(QTextDocument *document);
0258     ~QPlainTextDocumentLayout();
0259 
0260     void draw(QPainter *, const PaintContext &) override;
0261     int hitTest(const QPointF &, Qt::HitTestAccuracy ) const override;
0262 
0263     int pageCount() const override;
0264     QSizeF documentSize() const override;
0265 
0266     QRectF frameBoundingRect(QTextFrame *) const override;
0267     QRectF blockBoundingRect(const QTextBlock &block) const override;
0268 
0269     void ensureBlockLayout(const QTextBlock &block) const;
0270 
0271     void setCursorWidth(int width);
0272     int cursorWidth() const;
0273 
0274     void requestUpdate();
0275 
0276 protected:
0277     void documentChanged(int from, int /*charsRemoved*/, int charsAdded) override;
0278 
0279 
0280 private:
0281     void setTextWidth(qreal newWidth);
0282     qreal textWidth() const;
0283     void layoutBlock(const QTextBlock &block);
0284     qreal blockWidth(const QTextBlock &block);
0285 
0286     QPlainTextDocumentLayoutPrivate *priv() const;
0287 
0288     friend class QPlainTextEdit;
0289     friend class QPlainTextEditPrivate;
0290 };
0291 
0292 QT_END_NAMESPACE
0293 
0294 #endif // QPLAINTEXTEDIT_H