Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# qtextedit.h

This is the verbatim text of the qtextedit.h include file. It is provided only for illustration; the copyright remains with Trolltech.

    /****************************************************************************
    ** $Id:  qt/qtextedit.h   3.0.3   edited Mar 12 10:09 $
    **
    ** Definition of the QTextEdit class
    **
    ** Created : 990101
    **
    ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
    **
    ** This file is part of the widgets module of the Qt GUI Toolkit.
    **
    ** This file may be distributed under the terms of the Q Public License
    ** as defined by Trolltech AS of Norway and appearing in the file
    ** LICENSE.QPL included in the packaging of this file.
    **
    ** This file may be distributed and/or modified under the terms of the
    ** GNU General Public License version 2 as published by the Free Software
    ** Foundation and appearing in the file LICENSE.GPL included in the
    ** packaging of this file.
    **
    ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
    ** licenses may use this file in accordance with the Qt Commercial License
    ** Agreement provided with the Software.
    **
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    **
    ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
    **   information about Qt Commercial License Agreements.
    ** See http://www.trolltech.com/qpl/ for QPL licensing information.
    ** See http://www.trolltech.com/gpl/ for GPL licensing information.
    **
    ** Contact info@trolltech.com if any conditions of this licensing are
    ** not clear to you.
    **
    **********************************************************************/

    #ifndef QTEXTEDIT_H
    #define QTEXTEDIT_H

    #ifndef QT_H
    #include "qscrollview.h"
    #include "qstylesheet.h"
    #include "qptrvector.h"
    #include "qvaluelist.h"
    #endif // QT_H

    #ifndef QT_NO_TEXTEDIT
    class QPainter;
    class QTextDocument;
    class QTextCursor;
    class QKeyEvent;
    class QResizeEvent;
    class QMouseEvent;
    class QTimer;
    class QTextString;
    class QTextCommand;
    class QTextParag;
    class QTextFormat;
    class QFont;
    class QColor;
    class QTextEdit;
    class QTextBrowser;
    class QTextString;
    struct QUndoRedoInfoPrivate;
    class QPopupMenu;
    class QTextEditPrivate;

    class Q_EXPORT QTextEdit : public QScrollView
    {
        friend class QTextBrowser;

        Q_OBJECT
        Q_ENUMS( WordWrap WrapPolicy )
        Q_PROPERTY( TextFormat textFormat READ textFormat WRITE setTextFormat )
        Q_PROPERTY( QString text READ text WRITE setText )
        Q_PROPERTY( QBrush paper READ paper WRITE setPaper )
        Q_PROPERTY( bool linkUnderline READ linkUnderline WRITE setLinkUnderline )
        Q_PROPERTY( QString documentTitle READ documentTitle )
        Q_PROPERTY( int length READ length )
        Q_PROPERTY( WordWrap wordWrap READ wordWrap WRITE setWordWrap )
        Q_PROPERTY( int wrapColumnOrWidth READ wrapColumnOrWidth WRITE setWrapColumnOrWidth )
        Q_PROPERTY( WrapPolicy wrapPolicy READ wrapPolicy WRITE setWrapPolicy )
        Q_PROPERTY( bool hasSelectedText READ hasSelectedText )
        Q_PROPERTY( QString selectedText READ selectedText )
        Q_PROPERTY( int undoDepth READ undoDepth WRITE setUndoDepth )
        Q_PROPERTY( bool overwriteMode READ isOverwriteMode WRITE setOverwriteMode )
        Q_PROPERTY( bool modified READ isModified WRITE setModified DESIGNABLE false )
        Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
        Q_PROPERTY( bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled )
        Q_PROPERTY( int tabStopWidth READ tabStopWidth WRITE setTabStopWidth )

    public:
        enum WordWrap {
    	NoWrap,
    	WidgetWidth,
    	FixedPixelWidth,
    	FixedColumnWidth
        };

        enum WrapPolicy {
    	AtWordBoundary,
    	Anywhere,
    	AtWhiteSpace = AtWordBoundary // deprecated, don't use
        };

        enum KeyboardAction {
    	ActionBackspace,
    	ActionDelete,
    	ActionReturn,
    	ActionKill
        };

        enum CursorAction {
    	MoveBackward,
    	MoveForward,
    	MoveWordBackward,
    	MoveWordForward,
    	MoveUp,
    	MoveDown,
    	MoveLineStart,
    	MoveLineEnd,
    	MoveHome,
    	MoveEnd,
    	MovePgUp,
    	MovePgDown
        };

        enum VerticalAlignment {
    	AlignNormal,
    	AlignSuperScript,
    	AlignSubScript
        };

        QTextEdit( const QString& text, const QString& context = QString::null,
    	       QWidget* parent=0, const char* name=0);
        QTextEdit( QWidget* parent=0, const char* name=0 );
        virtual ~QTextEdit();
        void setPalette( const QPalette & );

        QString text() const;
        QString text( int para ) const;
        TextFormat textFormat() const;
        QString context() const;
        QString documentTitle() const;

        void getSelection( int *paraFrom, int *indexFrom,
    		    int *paraTo, int *indexTo, int selNum = 0 ) const;
        virtual bool find( const QString &expr, bool cs, bool wo, bool forward = TRUE,
    		       int *para = 0, int *index = 0 );

        int paragraphs() const;
        int lines() const;
        int linesOfParagraph( int para ) const;
        int lineOfChar( int para, int chr );
        int length() const;
        QRect paragraphRect( int para ) const;
        int paragraphAt( const QPoint &pos ) const;
        int charAt( const QPoint &pos, int *para ) const;
        int paragraphLength( int para ) const;

        QStyleSheet* styleSheet() const;
        QMimeSourceFactory* mimeSourceFactory() const;

        QBrush paper() const;
        bool linkUnderline() const;

        int heightForWidth( int w ) const;

        bool hasSelectedText() const;
        QString selectedText() const;
        bool isUndoAvailable() const;
        bool isRedoAvailable() const;

        WordWrap wordWrap() const;
        int wrapColumnOrWidth() const;
        WrapPolicy wrapPolicy() const;

        int tabStopWidth() const;

        QString anchorAt( const QPoint& pos );

        QSize sizeHint() const;

        bool isReadOnly() const { return readonly; }

        void getCursorPosition( int *parag, int *index ) const;

        bool isModified() const;
        bool italic() const;
        bool bold() const;
        bool underline() const;
        QString family() const;
        int pointSize() const;
        QColor color() const;
        QFont font() const;
        int alignment() const;
        int undoDepth() const;
        virtual bool getFormat( int para, int index, QFont *font, QColor *color, VerticalAlignment *verticalAlignment );
        virtual bool getParagraphFormat( int para, QFont *font, QColor *color,
    				     VerticalAlignment *verticalAlignment, int *alignment,
    				     QStyleSheetItem::DisplayMode *displayMode,
    				     QStyleSheetItem::ListStyle *listStyle,
    				     int *listDepth );
        bool isOverwriteMode() const { return overWrite; }
        QColor paragraphBackgroundColor( int para ) const;

        bool isUndoRedoEnabled() const;
        bool eventFilter( QObject *o, QEvent *e );

    public slots:
        void setEnabled( bool );
        virtual void setMimeSourceFactory( QMimeSourceFactory* factory );
        virtual void setStyleSheet( QStyleSheet* styleSheet );
        virtual void scrollToAnchor( const QString& name );
        virtual void setPaper( const QBrush& pap );
        virtual void setLinkUnderline( bool );

        virtual void setWordWrap( WordWrap mode );
        virtual void setWrapColumnOrWidth( int );
        virtual void setWrapPolicy( WrapPolicy policy );

        virtual void copy();
        virtual void append( const QString& text );

        void setText( const QString &txt ) { setText( txt, QString::null ); }
        virtual void setText( const QString &txt, const QString &context );
        virtual void setTextFormat( TextFormat f );

        virtual void selectAll( bool select = TRUE );
        virtual void setTabStopWidth( int ts );
        virtual void zoomIn( int range );
        virtual void zoomIn() { zoomIn( 1 ); }
        virtual void zoomOut( int range );
        virtual void zoomOut() { zoomOut( 1 ); }
        virtual void zoomTo( int size );

        virtual void sync();
        virtual void setReadOnly( bool b );

        virtual void undo();
        virtual void redo();
        virtual void cut();
        virtual void paste();
    #ifndef QT_NO_CLIPBOARD
        virtual void pasteSubType( const QCString &subtype );
    #endif
        virtual void clear();
        virtual void del();
        virtual void indent();
        virtual void setItalic( bool b );
        virtual void setBold( bool b );
        virtual void setUnderline( bool b );
        virtual void setFamily( const QString &f );
        virtual void setPointSize( int s );
        virtual void setColor( const QColor &c );
        virtual void setFont( const QFont &f );
        virtual void setVerticalAlignment( VerticalAlignment a );
        virtual void setAlignment( int a );
        virtual void setParagType( QStyleSheetItem::DisplayMode dm, QStyleSheetItem::ListStyle listStyle );
        virtual void setCursorPosition( int parag, int index );
        virtual void setSelection( int parag_from, int index_from, int parag_to, int index_to, int selNum = 0 );
        virtual void setSelectionAttributes( int selNum, const QColor &back, bool invertText );
        virtual void setModified( bool m );
        virtual void resetFormat();
        virtual void setUndoDepth( int d );
        virtual void setFormat( QTextFormat *f, int flags );
        virtual void ensureCursorVisible();
        virtual void placeCursor( const QPoint &pos, QTextCursor *c = 0 );
        virtual void moveCursor( CursorAction action, bool select );
        virtual void doKeyboardAction( KeyboardAction action );
        virtual void removeSelectedText( int selNum = 0 );
        virtual void removeSelection( int selNum = 0 );
        virtual void setCurrentFont( const QFont &f );
        virtual void setOverwriteMode( bool b ) { overWrite = b; }

        virtual void scrollToBottom();

        virtual void insert( const QString &text, bool indent = FALSE, bool checkNewLine = TRUE, bool removeSelected = TRUE );
        virtual void insertAt( const QString &text, int para, int index );
        virtual void removeParagraph( int para );
        virtual void insertParagraph( const QString &text, int para );

        virtual void setParagraphBackgroundColor( int para, const QColor &bg );
        virtual void clearParagraphBackground( int para );

        virtual void setUndoRedoEnabled( bool b );

    signals:
        void textChanged();
        void selectionChanged();
        void copyAvailable( bool );
        void undoAvailable( bool yes );
        void redoAvailable( bool yes );
        void currentFontChanged( const QFont &f );
        void currentColorChanged( const QColor &c );
        void currentAlignmentChanged( int a );
        void currentVerticalAlignmentChanged( VerticalAlignment a );
        void cursorPositionChanged( QTextCursor *c );
        void cursorPositionChanged( int para, int pos );
        void returnPressed();
        void modificationChanged( bool m );

    protected:
        void repaintChanged();
        void updateStyles();
        void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
        bool event( QEvent *e );
        void keyPressEvent( QKeyEvent *e );
        void resizeEvent( QResizeEvent *e );
        void viewportResizeEvent( QResizeEvent* );
        void contentsMousePressEvent( QMouseEvent *e );
        void contentsMouseMoveEvent( QMouseEvent *e );
        void contentsMouseReleaseEvent( QMouseEvent *e );
        void contentsMouseDoubleClickEvent( QMouseEvent *e );
    #ifndef QT_NO_WHEELEVENT
        void contentsWheelEvent( QWheelEvent *e );
    #endif
        void imStartEvent( QIMEvent * );
        void imComposeEvent( QIMEvent * );
        void imEndEvent( QIMEvent * );
    #ifndef QT_NO_DRAGANDDROP
        void contentsDragEnterEvent( QDragEnterEvent *e );
        void contentsDragMoveEvent( QDragMoveEvent *e );
        void contentsDragLeaveEvent( QDragLeaveEvent *e );
        void contentsDropEvent( QDropEvent *e );
    #endif
        void contentsContextMenuEvent( QContextMenuEvent *e );
        bool focusNextPrevChild( bool next );
        QTextDocument *document() const;
        QTextCursor *textCursor() const;
        void setDocument( QTextDocument *doc );
        virtual QPopupMenu *createPopupMenu( const QPoint& pos );
        virtual QPopupMenu *createPopupMenu();
        void drawCursor( bool visible );

        void windowActivationChange( bool );

    protected slots:
        virtual void doChangeInterval();

    private slots:
        void formatMore();
        void doResize();
        void doAutoScroll();
        void blinkCursor();
        void setModified();
        void startDrag();
        void documentWidthChanged( int w );
        void clipboardChanged();

    private:
        struct Q_EXPORT UndoRedoInfo {
    	enum Type { Invalid, Insert, Delete, Backspace, Return, RemoveSelected, Format, Alignment, ParagType };

    	UndoRedoInfo( QTextDocument *dc );
    	~UndoRedoInfo();
    	void clear();
    	bool valid() const;

    	QUndoRedoInfoPrivate *d;
    	int id;
    	int index;
    	int eid;
    	int eindex;
    	QTextFormat *format;
    	int flags;
    	Type type;
    	QTextDocument *doc;
    	QMemArray<int> oldAligns;
    	int newAlign;
    	bool list;
    	QStyleSheetItem::ListStyle listStyle;
    	QValueList< QPtrVector<QStyleSheetItem> > oldStyles;
    	QValueList<QStyleSheetItem::ListStyle> oldListStyles;
        };

    private:
        void updateCursor( const QPoint & pos );
        void drawContents( QPainter * );
        virtual bool linksEnabled() const { return FALSE; }
        void init();
        void checkUndoRedoInfo( UndoRedoInfo::Type t );
        void updateCurrentFormat();
        bool handleReadOnlyKeyEvent( QKeyEvent *e );
        void makeParagVisible( QTextParag *p );
    #ifndef QT_NO_MIME
        QCString pickSpecial(QMimeSource* ms, bool always_ask, const QPoint&);
    #endif
    #ifndef QT_NO_MIMECLIPBOARD
        void pasteSpecial(const QPoint&);
    #endif
        void setFontInternal( const QFont &f );

        virtual void emitHighlighted( const QString & ) {}
        virtual void emitLinkClicked( const QString & ) {}

        void readFormats( QTextCursor &c1, QTextCursor &c2, int oldLen, QTextString &text, bool fillStyles = FALSE );
        void clearUndoRedo();
        void paintDocument( bool drawAll, QPainter *p, int cx = -1, int cy = -1, int cw = -1, int ch = -1 );
        void moveCursor( CursorAction action );
        void ensureFormatted( QTextParag *p );
        void placeCursor( const QPoint &pos, QTextCursor *c, bool link );

    private:
        QTextDocument *doc;
        QTextCursor *cursor;
        QTimer *formatTimer, *scrollTimer, *changeIntervalTimer, *blinkTimer, *dragStartTimer;
        QTextParag *lastFormatted;
        int interval;
        UndoRedoInfo undoRedoInfo;
        QTextFormat *currentFormat;
        int currentAlignment;
        QPoint oldMousePos, mousePos;
        QPoint dragStartPos;
        QString onLink;
        WordWrap wrapMode;
        WrapPolicy wPolicy;
        int wrapWidth;
        QString pressedLink;
        QTextEditPrivate *d;
        bool inDoubleClick : 1;
        bool mousePressed : 1;
        bool cursorVisible : 1;
        bool blinkCursorVisible : 1;
        bool readOnly : 1;
        bool modified : 1;
        bool mightStartDrag : 1;
        bool inDnD : 1;
        bool readonly : 1;
        bool undoEnabled : 1;
        bool overWrite : 1;
    };

    inline QTextDocument *QTextEdit::document() const
    {
        return doc;
    }

    inline QTextCursor *QTextEdit::textCursor() const
    {
        return cursor;
    }

    inline void QTextEdit::setCurrentFont( const QFont &f )
    {
        QTextEdit::setFontInternal( f );
    }

    #endif //QT_NO_TEXTEDIT
    #endif //QTEXTVIEW_H