src/qt3support/text/q3textedit.h
changeset 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the Qt3Support module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #ifndef Q3TEXTEDIT_H
       
    43 #define Q3TEXTEDIT_H
       
    44 
       
    45 #include <Qt3Support/q3scrollview.h>
       
    46 #include <Qt3Support/q3stylesheet.h>
       
    47 #include <Qt3Support/q3mimefactory.h>
       
    48 #include <QtCore/qmap.h>
       
    49 
       
    50 QT_BEGIN_HEADER
       
    51 
       
    52 QT_BEGIN_NAMESPACE
       
    53 
       
    54 QT_MODULE(Qt3SupportLight)
       
    55 
       
    56 #ifndef QT_NO_TEXTEDIT
       
    57 // uncomment below to enable optimization mode - also uncomment the
       
    58 // optimDoAutoScroll() private slot since moc ignores #ifdefs..
       
    59 #define QT_TEXTEDIT_OPTIMIZATION
       
    60 
       
    61 class QPainter;
       
    62 class Q3TextDocument;
       
    63 class Q3TextCursor;
       
    64 class QKeyEvent;
       
    65 class QResizeEvent;
       
    66 class QMouseEvent;
       
    67 class QTimer;
       
    68 class Q3TextString;
       
    69 class QTextCommand;
       
    70 class Q3TextParagraph;
       
    71 class Q3TextFormat;
       
    72 class QFont;
       
    73 class QColor;
       
    74 class Q3TextEdit;
       
    75 class QTextBrowser;
       
    76 class Q3TextString;
       
    77 struct QUndoRedoInfoPrivate;
       
    78 class Q3PopupMenu;
       
    79 class Q3TextEditPrivate;
       
    80 class Q3SyntaxHighlighter;
       
    81 class Q3TextDrag;
       
    82 
       
    83 #ifdef QT_TEXTEDIT_OPTIMIZATION
       
    84 class Q3TextEditOptimPrivate
       
    85 {
       
    86 public:
       
    87     // Note: no left-tag has any value for leftTag or parent, and
       
    88     // no right-tag has any formatting flags set.
       
    89     enum TagType { Color = 0, Format = 1 };
       
    90     struct Tag {
       
    91         TagType type:2;
       
    92         bool bold:1;
       
    93         bool italic:1;
       
    94         bool underline:1;
       
    95         int line;
       
    96         int index;
       
    97         Tag * leftTag; // ptr to left-tag in a left-right tag pair
       
    98         Tag * parent;  // ptr to parent left-tag in a nested tag
       
    99         Tag * prev;
       
   100         Tag * next;
       
   101         QString tag;
       
   102     };
       
   103     Q3TextEditOptimPrivate()
       
   104     {
       
   105         len = numLines = maxLineWidth = 0;
       
   106         selStart.line = selStart.index = -1;
       
   107         selEnd.line = selEnd.index = -1;
       
   108         search.line = search.index = 0;
       
   109         tags = lastTag = 0;
       
   110     }
       
   111     void clearTags()
       
   112     {
       
   113         Tag * itr = tags;
       
   114         while (tags) {
       
   115             itr  = tags;
       
   116             tags = tags->next;
       
   117             delete itr;
       
   118         }
       
   119         tags = lastTag = 0;
       
   120         tagIndex.clear();
       
   121     }
       
   122     ~Q3TextEditOptimPrivate()
       
   123     {
       
   124         clearTags();
       
   125     }
       
   126     int len;
       
   127     int numLines;
       
   128     int maxLineWidth;
       
   129     struct Selection {
       
   130         int line;
       
   131         int index;
       
   132     };
       
   133     Selection selStart, selEnd, search;
       
   134     Tag * tags, * lastTag;
       
   135     QMap<int, QString> lines;
       
   136     QMap<int, Tag *> tagIndex;
       
   137 };
       
   138 #endif
       
   139 
       
   140 class Q_COMPAT_EXPORT Q3TextEdit : public Q3ScrollView
       
   141 {
       
   142     friend class Q3TextBrowser;
       
   143     friend class Q3SyntaxHighlighter;
       
   144 
       
   145     Q_OBJECT
       
   146     Q_ENUMS(WordWrap WrapPolicy)
       
   147     Q_FLAGS(AutoFormattingFlag)
       
   148     Q_PROPERTY(Qt::TextFormat textFormat READ textFormat WRITE setTextFormat)
       
   149     Q_PROPERTY(QString text READ text WRITE setText)
       
   150     Q_PROPERTY(QBrush paper READ paper WRITE setPaper)
       
   151     Q_PROPERTY(bool linkUnderline READ linkUnderline WRITE setLinkUnderline)
       
   152     Q_PROPERTY(QString documentTitle READ documentTitle)
       
   153     Q_PROPERTY(int length READ length)
       
   154     Q_PROPERTY(WordWrap wordWrap READ wordWrap WRITE setWordWrap)
       
   155     Q_PROPERTY(int wrapColumnOrWidth READ wrapColumnOrWidth WRITE setWrapColumnOrWidth)
       
   156     Q_PROPERTY(WrapPolicy wrapPolicy READ wrapPolicy WRITE setWrapPolicy)
       
   157     Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
       
   158     Q_PROPERTY(QString selectedText READ selectedText)
       
   159     Q_PROPERTY(int undoDepth READ undoDepth WRITE setUndoDepth)
       
   160     Q_PROPERTY(bool overwriteMode READ isOverwriteMode WRITE setOverwriteMode)
       
   161     Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
       
   162     Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
       
   163     Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
       
   164     Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
       
   165     Q_PROPERTY(bool tabChangesFocus READ tabChangesFocus WRITE setTabChangesFocus)
       
   166     Q_PROPERTY(AutoFormattingFlag autoFormatting READ autoFormatting WRITE setAutoFormatting)
       
   167 
       
   168 public:
       
   169     enum WordWrap {
       
   170         NoWrap,
       
   171         WidgetWidth,
       
   172         FixedPixelWidth,
       
   173         FixedColumnWidth
       
   174     };
       
   175 
       
   176     enum WrapPolicy {
       
   177         AtWordBoundary,
       
   178         AtWhiteSpace = AtWordBoundary, // AtWhiteSpace is deprecated
       
   179         Anywhere,
       
   180         AtWordOrDocumentBoundary
       
   181     };
       
   182 
       
   183     enum AutoFormattingFlag {
       
   184         AutoNone = 0,
       
   185         AutoBulletList = 0x00000001,
       
   186         AutoAll = 0xffffffff
       
   187     };
       
   188 
       
   189     Q_DECLARE_FLAGS(AutoFormatting, AutoFormattingFlag)
       
   190 
       
   191     enum KeyboardAction {
       
   192         ActionBackspace,
       
   193         ActionDelete,
       
   194         ActionReturn,
       
   195         ActionKill,
       
   196         ActionWordBackspace,
       
   197         ActionWordDelete
       
   198     };
       
   199 
       
   200     enum CursorAction {
       
   201         MoveBackward,
       
   202         MoveForward,
       
   203         MoveWordBackward,
       
   204         MoveWordForward,
       
   205         MoveUp,
       
   206         MoveDown,
       
   207         MoveLineStart,
       
   208         MoveLineEnd,
       
   209         MoveHome,
       
   210         MoveEnd,
       
   211         MovePgUp,
       
   212         MovePgDown
       
   213     };
       
   214 
       
   215     enum VerticalAlignment {
       
   216         AlignNormal,
       
   217         AlignSuperScript,
       
   218         AlignSubScript
       
   219     };
       
   220 
       
   221     enum TextInsertionFlags {
       
   222         RedoIndentation = 0x0001,
       
   223         CheckNewLines = 0x0002,
       
   224         RemoveSelected = 0x0004
       
   225     };
       
   226 
       
   227     Q3TextEdit(const QString& text, const QString& context = QString(),
       
   228                QWidget* parent=0, const char* name=0);
       
   229     Q3TextEdit(QWidget* parent=0, const char* name=0);
       
   230     virtual ~Q3TextEdit();
       
   231 
       
   232     QString text() const;
       
   233     QString text(int para) const;
       
   234     Qt::TextFormat textFormat() const;
       
   235     QString context() const;
       
   236     QString documentTitle() const;
       
   237 
       
   238     void getSelection(int *paraFrom, int *indexFrom,
       
   239                     int *paraTo, int *indexTo, int selNum = 0) const;
       
   240     virtual bool find(const QString &expr, bool cs, bool wo, bool forward = true,
       
   241                        int *para = 0, int *index = 0);
       
   242 
       
   243     int paragraphs() const;
       
   244     int lines() const;
       
   245     int linesOfParagraph(int para) const;
       
   246     int lineOfChar(int para, int chr);
       
   247     int length() const;
       
   248     QRect paragraphRect(int para) const;
       
   249     int paragraphAt(const QPoint &pos) const;
       
   250     int charAt(const QPoint &pos, int *para) const;
       
   251     int paragraphLength(int para) const;
       
   252 
       
   253     Q3StyleSheet* styleSheet() const;
       
   254 #ifndef QT_NO_MIME
       
   255     Q3MimeSourceFactory* mimeSourceFactory() const;
       
   256 #endif
       
   257     QBrush paper() const;
       
   258     bool linkUnderline() const;
       
   259 
       
   260     int heightForWidth(int w) const;
       
   261 
       
   262     bool hasSelectedText() const;
       
   263     QString selectedText() const;
       
   264     bool isUndoAvailable() const;
       
   265     bool isRedoAvailable() const;
       
   266 
       
   267     WordWrap wordWrap() const;
       
   268     int wrapColumnOrWidth() const;
       
   269     WrapPolicy wrapPolicy() const;
       
   270 
       
   271     int tabStopWidth() const;
       
   272 
       
   273     QString anchorAt(const QPoint& pos, Qt::AnchorAttribute a = Qt::AnchorHref);
       
   274 
       
   275     QSize sizeHint() const;
       
   276 
       
   277     bool isReadOnly() const { return readonly; }
       
   278 
       
   279     void getCursorPosition(int *parag, int *index) const;
       
   280 
       
   281     bool isModified() const;
       
   282     bool italic() const;
       
   283     bool bold() const;
       
   284     bool underline() const;
       
   285     QString family() const;
       
   286     int pointSize() const;
       
   287     QColor color() const;
       
   288     QFont font() const;
       
   289     QFont currentFont() const;
       
   290     int alignment() const;
       
   291     VerticalAlignment verticalAlignment() const;
       
   292     int undoDepth() const;
       
   293 
       
   294     // do not use, will go away
       
   295     virtual bool getFormat(int para, int index, QFont *font, QColor *color, VerticalAlignment *verticalAlignment);
       
   296     // do not use, will go away
       
   297     virtual bool getParagraphFormat(int para, QFont *font, QColor *color,
       
   298                                      VerticalAlignment *verticalAlignment, int *alignment,
       
   299                                      Q3StyleSheetItem::DisplayMode *displayMode,
       
   300                                      Q3StyleSheetItem::ListStyle *listStyle,
       
   301                                      int *listDepth);
       
   302 
       
   303 
       
   304     bool isOverwriteMode() const { return overWrite; }
       
   305     QColor paragraphBackgroundColor(int para) const;
       
   306 
       
   307     bool isUndoRedoEnabled() const;
       
   308     bool eventFilter(QObject *o, QEvent *e);
       
   309     bool tabChangesFocus() const;
       
   310 
       
   311     void setAutoFormatting(AutoFormatting);
       
   312     AutoFormatting autoFormatting() const;
       
   313     Q3SyntaxHighlighter *syntaxHighlighter() const;
       
   314 
       
   315 public Q_SLOTS:
       
   316 #ifndef QT_NO_MIME
       
   317     virtual void setMimeSourceFactory(Q3MimeSourceFactory* factory);
       
   318 #endif
       
   319     virtual void setStyleSheet(Q3StyleSheet* styleSheet);
       
   320     virtual void scrollToAnchor(const QString& name);
       
   321     virtual void setPaper(const QBrush& pap);
       
   322     virtual void setLinkUnderline(bool);
       
   323 
       
   324     virtual void setWordWrap(Q3TextEdit::WordWrap mode);
       
   325     virtual void setWrapColumnOrWidth(int);
       
   326     virtual void setWrapPolicy(Q3TextEdit::WrapPolicy policy);
       
   327 
       
   328     virtual void copy();
       
   329     virtual void append(const QString& text);
       
   330 
       
   331     void setText(const QString &txt) { setText(txt, QString()); }
       
   332     virtual void setText(const QString &txt, const QString &context);
       
   333     virtual void setTextFormat(Qt::TextFormat f);
       
   334 
       
   335     virtual void selectAll(bool select = true);
       
   336     virtual void setTabStopWidth(int ts);
       
   337     virtual void zoomIn(int range);
       
   338     virtual void zoomIn() { zoomIn(1); }
       
   339     virtual void zoomOut(int range);
       
   340     virtual void zoomOut() { zoomOut(1); }
       
   341     virtual void zoomTo(int size);
       
   342 
       
   343     virtual void sync();
       
   344     virtual void setReadOnly(bool b);
       
   345 
       
   346     virtual void undo();
       
   347     virtual void redo();
       
   348     virtual void cut();
       
   349     virtual void paste();
       
   350 #ifndef QT_NO_CLIPBOARD
       
   351     virtual void pasteSubType(const QByteArray &subtype);
       
   352 #endif
       
   353     virtual void clear();
       
   354     virtual void del();
       
   355     virtual void indent();
       
   356     virtual void setItalic(bool b);
       
   357     virtual void setBold(bool b);
       
   358     virtual void setUnderline(bool b);
       
   359     virtual void setFamily(const QString &f);
       
   360     virtual void setPointSize(int s);
       
   361     virtual void setColor(const QColor &c);
       
   362     virtual void setVerticalAlignment(Q3TextEdit::VerticalAlignment a);
       
   363     virtual void setAlignment(int a);
       
   364 
       
   365     // do not use, will go away
       
   366     virtual void setParagType(Q3StyleSheetItem::DisplayMode dm, Q3StyleSheetItem::ListStyle listStyle);
       
   367 
       
   368     virtual void setCursorPosition(int parag, int index);
       
   369     virtual void setSelection(int parag_from, int index_from, int parag_to, int index_to, int selNum = 0);
       
   370     virtual void setSelectionAttributes(int selNum, const QColor &back, bool invertText);
       
   371     virtual void setModified(bool m);
       
   372     virtual void resetFormat();
       
   373     virtual void setUndoDepth(int d);
       
   374     virtual void setFormat(Q3TextFormat *f, int flags);
       
   375     virtual void ensureCursorVisible();
       
   376     virtual void placeCursor(const QPoint &pos, Q3TextCursor *c = 0);
       
   377     virtual void moveCursor(Q3TextEdit::CursorAction action, bool select);
       
   378     virtual void doKeyboardAction(Q3TextEdit::KeyboardAction action);
       
   379     virtual void removeSelectedText(int selNum = 0);
       
   380     virtual void removeSelection(int selNum = 0);
       
   381     virtual void setCurrentFont(const QFont &f);
       
   382     virtual void setOverwriteMode(bool b) { overWrite = b; }
       
   383 
       
   384     virtual void scrollToBottom();
       
   385 
       
   386     virtual void insert(const QString &text, uint insertionFlags = CheckNewLines | RemoveSelected);
       
   387 
       
   388     // obsolete
       
   389     virtual void insert(const QString &text, bool, bool = true, bool = true);
       
   390 
       
   391     virtual void insertAt(const QString &text, int para, int index);
       
   392     virtual void removeParagraph(int para);
       
   393     virtual void insertParagraph(const QString &text, int para);
       
   394 
       
   395     virtual void setParagraphBackgroundColor(int para, const QColor &bg);
       
   396     virtual void clearParagraphBackground(int para);
       
   397 
       
   398     virtual void setUndoRedoEnabled(bool b);
       
   399     virtual void setTabChangesFocus(bool b);
       
   400 
       
   401 #ifdef QT_TEXTEDIT_OPTIMIZATION
       
   402     void polishEvent(QEvent*);
       
   403     void setMaxLogLines(int numLines);
       
   404     int maxLogLines() const;
       
   405 #endif
       
   406 
       
   407 Q_SIGNALS:
       
   408     void textChanged();
       
   409     void selectionChanged();
       
   410     void copyAvailable(bool);
       
   411     void undoAvailable(bool yes);
       
   412     void redoAvailable(bool yes);
       
   413     void currentFontChanged(const QFont &f);
       
   414     void currentColorChanged(const QColor &c);
       
   415     void currentAlignmentChanged(int a);
       
   416     void currentVerticalAlignmentChanged(Q3TextEdit::VerticalAlignment a);
       
   417     void cursorPositionChanged(Q3TextCursor *c);
       
   418     void cursorPositionChanged(int para, int pos);
       
   419     void returnPressed();
       
   420     void modificationChanged(bool m);
       
   421     void clicked(int parag, int index);
       
   422     void doubleClicked(int parag, int index);
       
   423 
       
   424 protected:
       
   425     void repaintChanged();
       
   426     void updateStyles();
       
   427     void drawContents(QPainter *p, int cx, int cy, int cw, int ch);
       
   428     bool event(QEvent *e);
       
   429     void changeEvent(QEvent *);
       
   430     void keyPressEvent(QKeyEvent *e);
       
   431     void resizeEvent(QResizeEvent *e);
       
   432     void viewportResizeEvent(QResizeEvent*);
       
   433     void contentsMousePressEvent(QMouseEvent *e);
       
   434     void contentsMouseMoveEvent(QMouseEvent *e);
       
   435     void contentsMouseReleaseEvent(QMouseEvent *e);
       
   436     void contentsMouseDoubleClickEvent(QMouseEvent *e);
       
   437 #ifndef QT_NO_WHEELEVENT
       
   438     void contentsWheelEvent(QWheelEvent *e);
       
   439 #endif
       
   440     void inputMethodEvent(QInputMethodEvent *);
       
   441 #ifndef QT_NO_DRAGANDDROP
       
   442     void contentsDragEnterEvent(QDragEnterEvent *e);
       
   443     void contentsDragMoveEvent(QDragMoveEvent *e);
       
   444     void contentsDragLeaveEvent(QDragLeaveEvent *e);
       
   445     void contentsDropEvent(QDropEvent *e);
       
   446 #endif
       
   447     void contentsContextMenuEvent(QContextMenuEvent *e);
       
   448     bool focusNextPrevChild(bool next);
       
   449     Q3TextDocument *document() const;
       
   450     Q3TextCursor *textCursor() const;
       
   451     void setDocument(Q3TextDocument *doc);
       
   452     virtual Q3PopupMenu *createPopupMenu(const QPoint& pos);
       
   453     virtual Q3PopupMenu *createPopupMenu();
       
   454     void drawCursor(bool visible);
       
   455 
       
   456 protected Q_SLOTS:
       
   457     virtual void doChangeInterval();
       
   458     virtual void sliderReleased();
       
   459 
       
   460 private Q_SLOTS:
       
   461     void formatMore();
       
   462     void doResize();
       
   463     void autoScrollTimerDone();
       
   464     void blinkCursor();
       
   465     void setModified();
       
   466     void startDrag();
       
   467     void documentWidthChanged(int w);
       
   468     void clipboardChanged();
       
   469 
       
   470 private:
       
   471     struct Q_COMPAT_EXPORT UndoRedoInfo {
       
   472         enum Type { Invalid, Insert, Delete, Backspace, Return, RemoveSelected, Format, Style, IME };
       
   473 
       
   474         UndoRedoInfo(Q3TextDocument *dc);
       
   475         ~UndoRedoInfo();
       
   476         void clear();
       
   477         bool valid() const;
       
   478 
       
   479         QUndoRedoInfoPrivate *d;
       
   480         int id;
       
   481         int index;
       
   482         int eid;
       
   483         int eindex;
       
   484         Q3TextFormat *format;
       
   485         int flags;
       
   486         Type type;
       
   487         Q3TextDocument *doc;
       
   488         QByteArray styleInformation;
       
   489     };
       
   490 
       
   491 private:
       
   492     void updateCursor(const QPoint & pos);
       
   493     void handleMouseMove(const QPoint& pos);
       
   494     void drawContents(QPainter *);
       
   495     virtual bool linksEnabled() const { return false; }
       
   496     void init();
       
   497     void checkUndoRedoInfo(UndoRedoInfo::Type t);
       
   498     void updateCurrentFormat();
       
   499     bool handleReadOnlyKeyEvent(QKeyEvent *e);
       
   500     void makeParagVisible(Q3TextParagraph *p);
       
   501     void normalCopy();
       
   502     void copyToClipboard();
       
   503 #ifndef QT_NO_MIME
       
   504     QByteArray pickSpecial(QMimeSource* ms, bool always_ask, const QPoint&);
       
   505     Q3TextDrag *dragObject(QWidget *parent = 0) const;
       
   506 #endif
       
   507 #ifndef QT_NO_MIMECLIPBOARD
       
   508     void pasteSpecial(const QPoint&);
       
   509 #endif
       
   510     void setFontInternal(const QFont &f);
       
   511 
       
   512     virtual void emitHighlighted(const QString &) {}
       
   513     virtual void emitLinkClicked(const QString &) {}
       
   514 
       
   515     void readFormats(Q3TextCursor &c1, Q3TextCursor &c2, Q3TextString &text, bool fillStyles = false);
       
   516     void clearUndoRedo();
       
   517     void paintDocument(bool drawAll, QPainter *p, int cx = -1, int cy = -1, int cw = -1, int ch = -1);
       
   518     void moveCursor(CursorAction action);
       
   519     void ensureFormatted(Q3TextParagraph *p);
       
   520     void placeCursor(const QPoint &pos, Q3TextCursor *c, bool link);
       
   521     QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
       
   522 
       
   523 #ifdef QT_TEXTEDIT_OPTIMIZATION
       
   524     bool checkOptimMode();
       
   525     QString optimText() const;
       
   526     void optimSetText(const QString &str);
       
   527     void optimAppend(const QString &str);
       
   528     void optimInsert(const QString &str, int line, int index);
       
   529     void optimDrawContents(QPainter * p, int cx, int cy, int cw, int ch);
       
   530     void optimMousePressEvent(QMouseEvent * e);
       
   531     void optimMouseReleaseEvent(QMouseEvent * e);
       
   532     void optimMouseMoveEvent(QMouseEvent * e);
       
   533     int  optimCharIndex(const QString &str, int mx) const;
       
   534     void optimSelectAll();
       
   535     void optimRemoveSelection();
       
   536     void optimSetSelection(int startLine, int startIdx, int endLine,
       
   537                             int endIdx);
       
   538     bool optimHasSelection() const;
       
   539     QString optimSelectedText() const;
       
   540     bool optimFind(const QString & str, bool, bool, bool, int *, int *);
       
   541     void optimParseTags(QString * str, int lineNo = -1, int indexOffset = 0);
       
   542     Q3TextEditOptimPrivate::Tag * optimPreviousLeftTag(int line);
       
   543     void optimSetTextFormat(Q3TextDocument *, Q3TextCursor *, Q3TextFormat * f,
       
   544                              int, int, Q3TextEditOptimPrivate::Tag * t);
       
   545     Q3TextEditOptimPrivate::Tag * optimAppendTag(int index, const QString & tag);
       
   546     Q3TextEditOptimPrivate::Tag * optimInsertTag(int line, int index, const QString & tag);
       
   547     void optimCheckLimit(const QString& str);
       
   548     bool optimHasBoldMetrics(int line);
       
   549 
       
   550 private Q_SLOTS:
       
   551     void optimDoAutoScroll();
       
   552 #endif // QT_TEXTEDIT_OPTIMIZATION
       
   553 
       
   554 private:
       
   555 #ifndef QT_NO_CLIPBOARD
       
   556     void pasteSubType(const QByteArray &subtype, QMimeSource *m);
       
   557 #endif
       
   558 
       
   559 private:
       
   560     Q_DISABLE_COPY(Q3TextEdit)
       
   561 
       
   562     Q3TextDocument *doc;
       
   563     Q3TextCursor *cursor;
       
   564     QTimer *formatTimer, *scrollTimer, *changeIntervalTimer, *blinkTimer, *dragStartTimer;
       
   565     Q3TextParagraph *lastFormatted;
       
   566     int interval;
       
   567     UndoRedoInfo undoRedoInfo;
       
   568     Q3TextFormat *currentFormat;
       
   569     int currentAlignment;
       
   570     QPoint oldMousePos, mousePos;
       
   571     QPoint dragStartPos;
       
   572     QString onLink;
       
   573     WordWrap wrapMode;
       
   574     WrapPolicy wPolicy;
       
   575     int wrapWidth;
       
   576     QString pressedLink;
       
   577     Q3TextEditPrivate *d;
       
   578     bool inDoubleClick : 1;
       
   579     bool mousePressed : 1;
       
   580     bool cursorVisible : 1;
       
   581     bool blinkCursorVisible : 1;
       
   582     bool modified : 1;
       
   583     bool mightStartDrag : 1;
       
   584     bool inDnD : 1;
       
   585     bool readonly : 1;
       
   586     bool undoEnabled : 1;
       
   587     bool overWrite : 1;
       
   588 };
       
   589 
       
   590 Q_DECLARE_OPERATORS_FOR_FLAGS(Q3TextEdit::AutoFormatting)
       
   591 
       
   592 inline Q3TextDocument *Q3TextEdit::document() const
       
   593 {
       
   594     return doc;
       
   595 }
       
   596 
       
   597 inline Q3TextCursor *Q3TextEdit::textCursor() const
       
   598 {
       
   599     return cursor;
       
   600 }
       
   601 
       
   602 inline void Q3TextEdit::setCurrentFont(const QFont &f)
       
   603 {
       
   604     Q3TextEdit::setFontInternal(f);
       
   605 }
       
   606 
       
   607 #endif // QT_NO_TEXTEDIT
       
   608 
       
   609 QT_END_NAMESPACE
       
   610 
       
   611 QT_END_HEADER
       
   612 
       
   613 #endif // Q3TEXTEDIT_H