qplaintextedit.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:10k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QPLAINTEXTEDIT_H
  38. #define QPLAINTEXTEDIT_H
  39. #include <QtGui/qtextedit.h>
  40. #include <QtGui/qabstractscrollarea.h>
  41. #include <QtGui/qtextdocument.h>
  42. #include <QtGui/qtextoption.h>
  43. #include <QtGui/qtextcursor.h>
  44. #include <QtGui/qtextformat.h>
  45. #include <QtGui/qabstracttextdocumentlayout.h>
  46. #ifndef QT_NO_TEXTEDIT
  47. QT_BEGIN_HEADER
  48. QT_BEGIN_NAMESPACE
  49. QT_MODULE(Gui)
  50. class QStyleSheet;
  51. class QTextDocument;
  52. class QMenu;
  53. class QPlainTextEditPrivate;
  54. class QMimeData;
  55. class Q_GUI_EXPORT QPlainTextEdit : public QAbstractScrollArea
  56. {
  57.     Q_OBJECT
  58.     Q_DECLARE_PRIVATE(QPlainTextEdit)
  59.     Q_ENUMS(LineWrapMode)
  60.     Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
  61.     Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle)
  62.     Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
  63.     Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
  64.     QDOC_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
  65.     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
  66.     Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true)
  67.     Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
  68.     Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
  69.     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
  70.     Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags WRITE setTextInteractionFlags)
  71.     Q_PROPERTY(int blockCount READ blockCount)
  72.     Q_PROPERTY(int maximumBlockCount READ maximumBlockCount WRITE setMaximumBlockCount)
  73.     Q_PROPERTY(bool backgroundVisible READ backgroundVisible WRITE setBackgroundVisible)
  74.     Q_PROPERTY(bool centerOnScroll READ centerOnScroll WRITE setCenterOnScroll)
  75. public:
  76.     enum LineWrapMode {
  77.         NoWrap,
  78.         WidgetWidth
  79.     };
  80.     explicit QPlainTextEdit(QWidget *parent = 0);
  81.     explicit QPlainTextEdit(const QString &text, QWidget *parent = 0);
  82.     virtual ~QPlainTextEdit();
  83.     void setDocument(QTextDocument *document);
  84.     QTextDocument *document() const;
  85.     void setTextCursor(const QTextCursor &cursor);
  86.     QTextCursor textCursor() const;
  87.     bool isReadOnly() const;
  88.     void setReadOnly(bool ro);
  89.     void setTextInteractionFlags(Qt::TextInteractionFlags flags);
  90.     Qt::TextInteractionFlags textInteractionFlags() const;
  91.     void mergeCurrentCharFormat(const QTextCharFormat &modifier);
  92.     void setCurrentCharFormat(const QTextCharFormat &format);
  93.     QTextCharFormat currentCharFormat() const;
  94.     bool tabChangesFocus() const;
  95.     void setTabChangesFocus(bool b);
  96.     inline void setDocumentTitle(const QString &title)
  97.     { document()->setMetaInformation(QTextDocument::DocumentTitle, title); }
  98.     inline QString documentTitle() const
  99.     { return document()->metaInformation(QTextDocument::DocumentTitle); }
  100.     inline bool isUndoRedoEnabled() const
  101.     { return document()->isUndoRedoEnabled(); }
  102.     inline void setUndoRedoEnabled(bool enable)
  103.     { document()->setUndoRedoEnabled(enable); }
  104.     inline void setMaximumBlockCount(int maximum)
  105.     { document()->setMaximumBlockCount(maximum); }
  106.     inline int maximumBlockCount() const
  107.     { return document()->maximumBlockCount(); }
  108.     LineWrapMode lineWrapMode() const;
  109.     void setLineWrapMode(LineWrapMode mode);
  110.     QTextOption::WrapMode wordWrapMode() const;
  111.     void setWordWrapMode(QTextOption::WrapMode policy);
  112.     void setBackgroundVisible(bool visible);
  113.     bool backgroundVisible() const;
  114.     void setCenterOnScroll(bool enabled);
  115.     bool centerOnScroll() const;
  116.     bool find(const QString &exp, QTextDocument::FindFlags options = 0);
  117.     inline QString toPlainText() const
  118.     { return document()->toPlainText(); }
  119.     void ensureCursorVisible();
  120.     virtual QVariant loadResource(int type, const QUrl &name);
  121. #ifndef QT_NO_CONTEXTMENU
  122.     QMenu *createStandardContextMenu();
  123. #endif
  124.     QTextCursor cursorForPosition(const QPoint &pos) const;
  125.     QRect cursorRect(const QTextCursor &cursor) const;
  126.     QRect cursorRect() const;
  127.     bool overwriteMode() const;
  128.     void setOverwriteMode(bool overwrite);
  129.     int tabStopWidth() const;
  130.     void setTabStopWidth(int width);
  131.     int cursorWidth() const;
  132.     void setCursorWidth(int width);
  133.     void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections);
  134.     QList<QTextEdit::ExtraSelection> extraSelections() const;
  135.     void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor);
  136.     bool canPaste() const;
  137. #ifndef QT_NO_PRINTER
  138.     void print(QPrinter *printer) const;
  139. #endif
  140.     int blockCount() const;
  141. public Q_SLOTS:
  142.     void setPlainText(const QString &text);
  143. #ifndef QT_NO_CLIPBOARD
  144.     void cut();
  145.     void copy();
  146.     void paste();
  147. #endif
  148.     void undo();
  149.     void redo();
  150.     void clear();
  151.     void selectAll();
  152.     void insertPlainText(const QString &text);
  153.     void appendPlainText(const QString &text);
  154.     void appendHtml(const QString &html);
  155.     void centerCursor();
  156. Q_SIGNALS:
  157.     void textChanged();
  158.     void undoAvailable(bool b);
  159.     void redoAvailable(bool b);
  160.     void copyAvailable(bool b);
  161.     void selectionChanged();
  162.     void cursorPositionChanged();
  163.     void updateRequest(const QRect &rect, int dy);
  164.     void blockCountChanged(int newBlockCount);
  165.     void modificationChanged(bool);
  166. protected:
  167.     virtual bool event(QEvent *e);
  168.     virtual void timerEvent(QTimerEvent *e);
  169.     virtual void keyPressEvent(QKeyEvent *e);
  170.     virtual void keyReleaseEvent(QKeyEvent *e);
  171.     virtual void resizeEvent(QResizeEvent *e);
  172.     virtual void paintEvent(QPaintEvent *e);
  173.     virtual void mousePressEvent(QMouseEvent *e);
  174.     virtual void mouseMoveEvent(QMouseEvent *e);
  175.     virtual void mouseReleaseEvent(QMouseEvent *e);
  176.     virtual void mouseDoubleClickEvent(QMouseEvent *e);
  177.     virtual bool focusNextPrevChild(bool next);
  178. #ifndef QT_NO_CONTEXTMENU
  179.     virtual void contextMenuEvent(QContextMenuEvent *e);
  180. #endif
  181. #ifndef QT_NO_DRAGANDDROP
  182.     virtual void dragEnterEvent(QDragEnterEvent *e);
  183.     virtual void dragLeaveEvent(QDragLeaveEvent *e);
  184.     virtual void dragMoveEvent(QDragMoveEvent *e);
  185.     virtual void dropEvent(QDropEvent *e);
  186. #endif
  187.     virtual void focusInEvent(QFocusEvent *e);
  188.     virtual void focusOutEvent(QFocusEvent *e);
  189.     virtual void showEvent(QShowEvent *);
  190.     virtual void changeEvent(QEvent *e);
  191. #ifndef QT_NO_WHEELEVENT
  192.     virtual void wheelEvent(QWheelEvent *e);
  193. #endif
  194.     virtual QMimeData *createMimeDataFromSelection() const;
  195.     virtual bool canInsertFromMimeData(const QMimeData *source) const;
  196.     virtual void insertFromMimeData(const QMimeData *source);
  197.     virtual void inputMethodEvent(QInputMethodEvent *);
  198.     QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
  199.     QPlainTextEdit(QPlainTextEditPrivate &dd, QWidget *parent);
  200.     virtual void scrollContentsBy(int dx, int dy);
  201.     QTextBlock firstVisibleBlock() const;
  202.     QPointF contentOffset() const;
  203.     QRectF blockBoundingRect(const QTextBlock &block) const;
  204.     QRectF blockBoundingGeometry(const QTextBlock &block) const;
  205.     QAbstractTextDocumentLayout::PaintContext getPaintContext() const;
  206. private:
  207.     Q_DISABLE_COPY(QPlainTextEdit)
  208.     Q_PRIVATE_SLOT(d_func(), void _q_repaintContents(const QRectF &r))
  209.     Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
  210.     Q_PRIVATE_SLOT(d_func(), void _q_verticalScrollbarActionTriggered(int, int n = 1))
  211.     Q_PRIVATE_SLOT(d_func(), void _q_cursorPositionChanged())
  212.     friend class QPlainTextEditControl;
  213. };
  214. class QPlainTextDocumentLayoutPrivate;
  215. class Q_GUI_EXPORT QPlainTextDocumentLayout : public QAbstractTextDocumentLayout
  216. {
  217.     Q_OBJECT
  218.     Q_DECLARE_PRIVATE(QPlainTextDocumentLayout)
  219.     Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)
  220. public:
  221.     QPlainTextDocumentLayout(QTextDocument *document);
  222.     ~QPlainTextDocumentLayout();
  223.     void draw(QPainter *, const PaintContext &);
  224.     int hitTest(const QPointF &, Qt::HitTestAccuracy ) const;
  225.     int pageCount() const;
  226.     QSizeF documentSize() const;
  227.     QRectF frameBoundingRect(QTextFrame *) const;
  228.     QRectF blockBoundingRect(const QTextBlock &block) const;
  229.     void ensureBlockLayout(const QTextBlock &block) const;
  230.     void setCursorWidth(int width);
  231.     int cursorWidth() const;
  232.     void requestUpdate();
  233. protected:
  234.     void documentChanged(int from, int /*charsRemoved*/, int charsAdded);
  235. private:
  236.     void setTextWidth(qreal newWidth);
  237.     qreal textWidth() const;
  238.     void layoutBlock(const QTextBlock &block);
  239.     qreal blockWidth(const QTextBlock &block);
  240.     QPlainTextDocumentLayoutPrivate *priv() const;
  241.     friend class QPlainTextEdit;
  242.     friend class QPlainTextEditPrivate;
  243. };
  244. QT_END_NAMESPACE
  245. QT_END_HEADER
  246. #endif // QT_NO_TEXTEDIT
  247. #endif // QPLAINTEXTEDIT_H