basetexteditor.h 20.1 KB
Newer Older
1
/**************************************************************************
con's avatar
con committed
2
3
4
**
** This file is part of Qt Creator
**
hjk's avatar
hjk committed
5
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
con's avatar
con committed
6
**
7
** Contact: Nokia Corporation (qt-info@nokia.com)
con's avatar
con committed
8
**
9
** Commercial Usage
10
**
11
12
13
14
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
15
**
16
** GNU Lesser General Public License Usage
17
**
18
19
20
21
22
23
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24
**
25
** If you are unsure which license is appropriate for your use, please
hjk's avatar
hjk committed
26
** contact the sales department at http://qt.nokia.com/contact.
con's avatar
con committed
27
**
28
**************************************************************************/
hjk's avatar
hjk committed
29

con's avatar
con committed
30
31
32
33
34
#ifndef BASETEXTEDITOR_H
#define BASETEXTEDITOR_H

#include "itexteditable.h"

35
36
#include <find/ifindsupport.h>

con's avatar
con committed
37
38
39
40
#include <QtGui/QPlainTextEdit>

QT_BEGIN_NAMESPACE
class QToolBar;
41
class QTimeLine;
con's avatar
con committed
42
43
QT_END_NAMESPACE

44
45
namespace Utils {
    class LineColumnLabel;
46
    class ChangeSet;
con's avatar
con committed
47
48
49
}

namespace TextEditor {
mae's avatar
mae committed
50
struct TabSettings;
con's avatar
con committed
51
52
53

namespace Internal {
    class BaseTextEditorPrivate;
54
    class TextEditorOverlay;
55
    class RefactorOverlay;
Friedemann Kleint's avatar
Friedemann Kleint committed
56
    struct RefactorMarker;
57
58
    typedef QList<RefactorMarker> RefactorMarkers;

mae's avatar
mae committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
    class TEXTEDITOR_EXPORT BaseTextBlockSelection
    {
    public:

        bool isValid() const{ return !firstBlock.isNull() && !lastBlock.isNull(); }
        void clear() { firstBlock = lastBlock = QTextCursor(); }

        QTextCursor firstBlock; // defines the first block
        QTextCursor lastBlock; // defines the last block
        int firstVisualColumn; // defines the first visual column of the selection
        int lastVisualColumn; // defines the last visual column of the selection
        enum Anchor {TopLeft = 0, TopRight, BottomLeft, BottomRight} anchor;
        BaseTextBlockSelection():firstVisualColumn(0), lastVisualColumn(0), anchor(BottomRight){}
        void moveAnchor(int blockNumber, int visualColumn);
        inline int anchorColumnNumber() const { return (anchor % 2) ? lastVisualColumn : firstVisualColumn; }
        inline int anchorBlockNumber() const {
            return (anchor <= TopRight ? firstBlock.blockNumber() : lastBlock.blockNumber()); }
        QTextCursor selection(const TabSettings &ts) const;
        void fromSelection(const TabSettings &ts, const QTextCursor &selection);
    };


con's avatar
con committed
81
82
83
84
85
}

class ITextMarkable;

class BaseTextDocument;
86
class BaseTextEditorEditable;
con's avatar
con committed
87
class FontSettings;
88
struct BehaviorSettings;
89
struct CompletionSettings;
90
struct DisplaySettings;
con's avatar
con committed
91
92
struct StorageSettings;

93
94
95
96
97
98
99
class TEXTEDITOR_EXPORT BaseTextEditorAnimator : public QObject
{
    Q_OBJECT

public:
    BaseTextEditorAnimator(QObject *parent);

100
101
    inline void setPosition(int position) { m_position = position; }
    inline int position() const { return m_position; }
102
103
104
105
106
107

    void setData(QFont f, QPalette pal, const QString &text);

    void draw(QPainter *p, const QPointF &pos);
    QRectF rect() const;

108
109
    inline qreal value() const { return m_value; }
    inline QPointF lastDrawPos() const { return m_lastDrawPos; }
110
111
112

    void finish();

mae's avatar
mae committed
113
114
    bool isRunning() const;

115
signals:
116
    void updateRequest(int position, QPointF lastPos, QRectF rect);
117
118
119
120
121
122
123
124
125


private slots:
    void step(qreal v);

private:
    QTimeLine *m_timeline;
    qreal m_value;
    int m_position;
126
    QPointF m_lastDrawPos;
127
128
129
130
131
132
133
    QFont m_font;
    QPalette m_palette;
    QString m_text;
    QSizeF m_size;
};


134
class TEXTEDITOR_EXPORT BaseTextEditor : public QPlainTextEdit
con's avatar
con committed
135
136
{
    Q_OBJECT
mae's avatar
mae committed
137
138
    Q_PROPERTY(int verticalBlockSelectionFirstColumn READ verticalBlockSelectionFirstColumn)
    Q_PROPERTY(int verticalBlockSelectionLastColumn READ verticalBlockSelectionLastColumn)
con's avatar
con committed
139
140
141
142
public:
    BaseTextEditor(QWidget *parent);
    ~BaseTextEditor();

143
    static ITextEditor *openEditorAt(const QString &fileName, int line, int column = 0,
144
145
                                     const QString &editorId = QString(),
                                     bool *newEditor = 0);
con's avatar
con committed
146

147
148
149
    const Utils::ChangeSet &changeSet() const;
    void setChangeSet(const Utils::ChangeSet &changeSet);

con's avatar
con committed
150
151
152
    // EditorInterface
    Core::IFile * file();
    bool createNew(const QString &contents);
Lasse Holmstedt's avatar
Lasse Holmstedt committed
153
    virtual bool open(const QString &fileName = QString());
con's avatar
con committed
154
155
156
157
158
159
    QByteArray saveState() const;
    bool restoreState(const QByteArray &state);
    QString displayName() const;

    // ITextEditor

160
    void gotoLine(int line, int column = 0);
con's avatar
con committed
161
162
163
164
165
166

    int position(
        ITextEditor::PositionOperation posOp = ITextEditor::Current
        , int at = -1) const;
    void convertPosition(int pos, int *line, int *column) const;

167
    BaseTextEditorEditable *editableInterface() const;
con's avatar
con committed
168
169
170
    ITextMarkable *markableInterface() const;

    virtual void triggerCompletions();
Roberto Raggi's avatar
Roberto Raggi committed
171
    virtual void triggerQuickFix();
con's avatar
con committed
172
173
174
175
176
177
178

    QChar characterAt(int pos) const;

    void print(QPrinter *);

    void setSuggestedFileName(const QString &suggestedFileName);
    QString mimeType() const;
Erik Verbruggen's avatar
Erik Verbruggen committed
179
    virtual void setMimeType(const QString &mt);
con's avatar
con committed
180
181


182
183
    void appendStandardContextMenuActions(QMenu *menu);

con's avatar
con committed
184
185
186
187
188
    // Works only in conjunction with a syntax highlighter that puts
    // parentheses into text block user data
    void setParenthesesMatchingEnabled(bool b);
    bool isParenthesesMatchingEnabled() const;

189
190
191
    void setAutoParenthesesEnabled(bool b);
    bool isAutoParenthesesEnabled() const;

con's avatar
con committed
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
    void setHighlightCurrentLine(bool b);
    bool highlightCurrentLine() const;

    void setLineNumbersVisible(bool b);
    bool lineNumbersVisible() const;

    void setMarksVisible(bool b);
    bool marksVisible() const;

    void setRequestMarkEnabled(bool b);
    bool requestMarkEnabled() const;

    void setLineSeparatorsAllowed(bool b);
    bool lineSeparatorsAllowed() const;

    void setCodeFoldingVisible(bool b);
    bool codeFoldingVisible() const;

210
211
212
    void setCodeFoldingSupported(bool b);
    bool codeFoldingSupported() const;

213
214
215
    void setMouseNavigationEnabled(bool b);
    bool mouseNavigationEnabled() const;

216
217
218
    void setScrollWheelZoomingEnabled(bool b);
    bool scrollWheelZoomingEnabled() const;

con's avatar
con committed
219
220
221
222
223
224
225
226
227
228
229
230
231
232
    void setRevisionsVisible(bool b);
    bool revisionsVisible() const;

    void setVisibleWrapColumn(int column);
    int visibleWrapColumn() const;

    void setActionHack(QObject *);
    QObject *actionHack() const;

    void setTextCodec(QTextCodec *codec);
    QTextCodec *textCodec() const;

    void setReadOnly(bool b);

233
234
    void setTextCursor(const QTextCursor &cursor);

mae's avatar
mae committed
235
    void insertCodeSnippet(const QTextCursor &cursor, const QString &snippet);
236

237

mae's avatar
mae committed
238
239
    int verticalBlockSelectionFirstColumn() const;
    int verticalBlockSelectionLastColumn() const;
240

241
242
    QRegion translatedLineRegion(int lineStart, int lineEnd) const;

con's avatar
con committed
243
244
245
public slots:
    void setDisplayName(const QString &title);

mae's avatar
mae committed
246
247
    virtual void paste();
    virtual void cut();
con's avatar
con committed
248
249
250

    void zoomIn(int range = 1);
    void zoomOut(int range = 1);
mae's avatar
mae committed
251
    void zoomReset();
con's avatar
con committed
252

253
    void cutLine();
con's avatar
con committed
254
    void deleteLine();
mae's avatar
mae committed
255
256
257
    void unfoldAll();
    void fold();
    void unfold();
con's avatar
con committed
258
259
    void selectEncoding();

260
261
262
263
264
    void gotoBlockStart();
    void gotoBlockEnd();
    void gotoBlockStartWithSelection();
    void gotoBlockEndWithSelection();

mae's avatar
mae committed
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
    void gotoLineStart();
    void gotoLineStartWithSelection();
    void gotoLineEnd();
    void gotoLineEndWithSelection();
    void gotoNextLine();
    void gotoNextLineWithSelection();
    void gotoPreviousLine();
    void gotoPreviousLineWithSelection();
    void gotoPreviousCharacter();
    void gotoPreviousCharacterWithSelection();
    void gotoNextCharacter();
    void gotoNextCharacterWithSelection();
    void gotoPreviousWord();
    void gotoPreviousWordWithSelection();
    void gotoNextWord();
    void gotoNextWordWithSelection();
281

282
283
284
    void selectBlockUp();
    void selectBlockDown();

285
286
287
    void moveLineUp();
    void moveLineDown();

288
289
290
    void copyLineUp();
    void copyLineDown();

291
    void joinLines();
292

293
294
295
    void insertLineAbove();
    void insertLineBelow();

296
297
    void cleanWhitespace();

con's avatar
con committed
298
299
300
301
302
303
304
305
306
307
308
signals:
    void changed();

    // ITextEditor
    void contentsChanged();

protected:
    bool event(QEvent *e);
    void keyPressEvent(QKeyEvent *e);
    void wheelEvent(QWheelEvent *e);
    void changeEvent(QEvent *e);
309
    void focusInEvent(QFocusEvent *e);
mae's avatar
mae committed
310
    void focusOutEvent(QFocusEvent *e);
con's avatar
con committed
311

mae's avatar
mae committed
312
313
    void showEvent(QShowEvent *);

con's avatar
con committed
314
315
316
317
318
    // reimplemented to support block selection
    QMimeData *createMimeDataFromSelection() const;
    bool canInsertFromMimeData(const QMimeData *source) const;
    void insertFromMimeData(const QMimeData *source);

319
320
    static QString msgTextTooLarge(quint64 size);

321
322
323
private:
    void maybeSelectLine();

con's avatar
con committed
324
325
public:
    void duplicateFrom(BaseTextEditor *editor);
326

con's avatar
con committed
327
328
329
330
331
332
333
334
335
336
protected:
    BaseTextDocument *baseTextDocument() const;
    void setBaseTextDocument(BaseTextDocument *doc);

    void setDefaultPath(const QString &defaultPath);

    virtual BaseTextEditorEditable *createEditableInterface() = 0;

private slots:
    void editorContentsChange(int position, int charsRemoved, int charsAdded);
mae's avatar
mae committed
337
338
    void documentAboutToBeReloaded();
    void documentReloaded();
339
    void highlightSearchResults(const QString &txt, Find::FindFlags findFlags);
mae's avatar
mae committed
340
341
342
    void setFindScope(const QTextCursor &start, const QTextCursor &end, int, int);
    bool inFindScope(const QTextCursor &cursor);
    bool inFindScope(int selectionStart, int selectionEnd);
con's avatar
con committed
343
    void currentEditorChanged(Core::IEditor *editor);
344
    void maybeEmitContentsChangedBecauseOfUndo();
con's avatar
con committed
345
346
347
348

private:
    Internal::BaseTextEditorPrivate *d;
    friend class Internal::BaseTextEditorPrivate;
349
    friend class Internal::TextEditorOverlay;
350
    friend class Internal::RefactorOverlay;
con's avatar
con committed
351
352
353
354
355
356

public:
    QWidget *extraArea() const;
    virtual int extraAreaWidth(int *markWidthPtr = 0) const;
    virtual void extraAreaPaintEvent(QPaintEvent *);
    virtual void extraAreaLeaveEvent(QEvent *);
357
    virtual void extraAreaMouseEvent(QMouseEvent *);
con's avatar
con committed
358
359
360
361
362
363
364
365

    const TabSettings &tabSettings() const;
    const DisplaySettings &displaySettings() const;

    void markBlocksAsChanged(QList<int> blockNumbers);

    void ensureCursorVisible();

366
367
368
369
370
    enum ExtraSelectionKind {
        CurrentLineSelection,
        ParenthesesMatchingSelection,
        CodeWarningsSelection,
        CodeSemanticsSelection,
371
        UndefinedSymbolSelection,
Roberto Raggi's avatar
Roberto Raggi committed
372
        UnusedSymbolSelection,
hjk's avatar
hjk committed
373
        FakeVimSelection,
Roberto Raggi's avatar
Roberto Raggi committed
374
        OtherSelection,
375
        SnippetPlaceholderSelection,
Erik Verbruggen's avatar
Erik Verbruggen committed
376
        ObjCSelection,
377
378
379
380
        NExtraSelectionKinds
    };
    void setExtraSelections(ExtraSelectionKind kind, const QList<QTextEdit::ExtraSelection> &selections);
    QList<QTextEdit::ExtraSelection> extraSelections(ExtraSelectionKind kind) const;
381
    QString extraSelectionTooltip(int pos) const;
con's avatar
con committed
382

383
384
385

    void setRefactorMarkers(const Internal::RefactorMarkers &markers);
signals:
386
    void refactorMarkerClicked(const TextEditor::Internal::RefactorMarker &marker);
387
388
389

public:

390
391
392
393
394
395
    struct BlockRange
    {
        BlockRange() : first(0), last(-1) {}
        BlockRange(int first_position, int last_position)
          : first(first_position), last(last_position)
        {}
con's avatar
con committed
396
397
398
399
400
401
        int first;
        int last;
        inline bool isNull() const { return last < first; }
    };

    // the blocks list must be sorted
402
    void setIfdefedOutBlocks(const QList<BlockRange> &blocks);
con's avatar
con committed
403
404

public slots:
405
    virtual void format();
406
    virtual void rewrapParagraph();
407
408
    virtual void unCommentSelection();
    virtual void setFontSettings(const TextEditor::FontSettings &);
mae's avatar
mae committed
409
    void setFontSettingsIfVisible(const TextEditor::FontSettings &);
con's avatar
con committed
410
411
    virtual void setTabSettings(const TextEditor::TabSettings &);
    virtual void setDisplaySettings(const TextEditor::DisplaySettings &);
412
    virtual void setBehaviorSettings(const TextEditor::BehaviorSettings &);
413
    virtual void setStorageSettings(const TextEditor::StorageSettings &);
414
    virtual void setCompletionSettings(const TextEditor::CompletionSettings &);
con's avatar
con committed
415
416
417
418
419
420
421
422
423

protected:
    bool viewportEvent(QEvent *event);

    void resizeEvent(QResizeEvent *);
    void paintEvent(QPaintEvent *);
    void timerEvent(QTimerEvent *);
    void mouseMoveEvent(QMouseEvent *);
    void mousePressEvent(QMouseEvent *);
424
425
426
    void mouseReleaseEvent(QMouseEvent *);
    void leaveEvent(QEvent *);
    void keyReleaseEvent(QKeyEvent *);
con's avatar
con committed
427

428
429
    void dragEnterEvent(QDragEnterEvent *e);

430
public:
431
    // Returns true if key triggers an indent.
432
    virtual bool isElectricCharacter(QChar ch) const;
433
434
435

    void indentInsertedText(const QTextCursor &tc);

436
437
438
439
    // Returns the text to complete at the cursor position, or an empty string
    virtual QString autoComplete(QTextCursor &cursor, const QString &text) const;
    // Handles backspace. When returning true, backspace processing is stopped
    virtual bool autoBackspace(QTextCursor &cursor);
440
441
    // Hook to insert special characters on enter. Returns the number of extra blocks inserted.
    virtual int paragraphSeparatorAboutToBeInserted(QTextCursor &cursor);
con's avatar
con committed
442
443
444
445
    // Indent a text block based on previous line. Default does nothing
    virtual void indentBlock(QTextDocument *doc, QTextBlock block, QChar typedChar);
    // Indent at cursor. Calls indentBlock for selection or current line.
    virtual void indent(QTextDocument *doc, const QTextCursor &cursor, QChar typedChar);
mae's avatar
mae committed
446
447
    // Reindent at cursor. Selection will be adjusted according to the indentation change of the first block
    virtual void reindent(QTextDocument *doc, const QTextCursor &cursor);
con's avatar
con committed
448

449
    virtual bool contextAllowsAutoParentheses(const QTextCursor &cursor, const QString &textToInsert = QString()) const;
450
    virtual bool contextAllowsElectricCharacters(const QTextCursor &cursor) const;
451
452
453
454

    // Returns true if the cursor is inside a comment.
    virtual bool isInComment(const QTextCursor &cursor) const;

455
    virtual QString insertMatchingBrace(const QTextCursor &tc, const QString &text, QChar la, int *skippedChars) const;
456
457
458
459

    // Returns the text that needs to be inserted
    virtual QString insertParagraphSeparator(const QTextCursor &tc) const;

460
protected:
461
462
463
464
465
    static void countBracket(QChar open, QChar close, QChar c, int *errors, int *stillopen);

    static void countBrackets(QTextCursor cursor, int from, int end, QChar open, QChar close,
                              int *errors, int *stillopen);

466
467
468
469
470
    struct Link
    {
        Link(const QString &fileName = QString(),
             int line = 0,
             int column = 0)
471
472
            : begin(-1)
            , end(-1)
473
474
475
476
477
478
            , fileName(fileName)
            , line(line)
            , column(column)
        {}

        bool isValid() const
479
        { return begin != end; }
480

481
        bool operator==(const Link &other) const
482
        { return begin == other.begin && end == other.end; }
483

484
485
        int begin;           // Link position
        int end;           // Link end position
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501

        QString fileName;  // Target file
        int line;          // Target line
        int column;        // Target column
    };

    /*!
       Reimplement this function to enable code navigation.

       \a resolveTarget is set to true when the target of the link is relevant
       (it isn't until the link is used).
     */
    virtual Link findLinkAt(const QTextCursor &, bool resolveTarget = true);

    /*!
       Reimplement this function if you want to customize the way a link is
Tobias Hunger's avatar
Tobias Hunger committed
502
       opened. Returns whether the link was opened successfully.
503
504
505
     */
    virtual bool openLink(const Link &link);

506
507
    void maybeClearSomeExtraSelections(const QTextCursor &cursor);

con's avatar
con committed
508
509
510
511
512
513
514
515
protected slots:
    virtual void slotUpdateExtraAreaWidth();
    virtual void slotModificationChanged(bool);
    virtual void slotUpdateRequest(const QRect &r, int dy);
    virtual void slotCursorPositionChanged();
    virtual void slotUpdateBlockNotify(const QTextBlock &);

signals:
mae's avatar
mae committed
516
517
    void requestFontZoom(int zoom);
    void requestZoomReset();
con's avatar
con committed
518
    void requestBlockUpdate(const QTextBlock &);
519
520
    void requestAutoCompletion(TextEditor::ITextEditable *editor, bool forced);
    void requestQuickFix(TextEditor::ITextEditable *editor);
con's avatar
con committed
521
522

private:
523
    void maybeRequestAutoCompletion(const QChar &ch);
con's avatar
con committed
524
525
526
    void indentOrUnindent(bool doIndent);
    void handleHomeKey(bool anchor);
    void handleBackspaceKey();
527
    void moveLineUpDown(bool up);
528
    void copyLineUpDown(bool up);
529
    void saveCurrentCursorPositionForNavigation();
con's avatar
con committed
530
    void updateHighlights();
531
    void updateCurrentLineHighlight();
con's avatar
con committed
532

533
534
535
536
537
    void drawFoldingMarker(QPainter *painter, const QPalette &pal,
                           const QRect &rect,
                           bool expanded,
                           bool active,
                           bool hovered) const;
538

539
540
541
542
543
    void drawCollapsedBlockPopup(QPainter &painter,
                                 const QTextBlock &block,
                                 QPointF offset,
                                 const QRect &clip);

con's avatar
con committed
544
    void toggleBlockVisible(const QTextBlock &block);
mae's avatar
mae committed
545
    QRect foldBox();
con's avatar
con committed
546

mae's avatar
mae committed
547
    QTextBlock foldedBlockAt(const QPoint &pos, QRect *box = 0) const;
con's avatar
con committed
548

549
    void updateLink(QMouseEvent *e);
550
551
    void showLink(const Link &);
    void clearLink();
mae's avatar
mae committed
552

553
554
    void universalHelper(); // test function for development

con's avatar
con committed
555
private slots:
556
557
558
    // auto completion
    void _q_requestAutoCompletion();

mae's avatar
mae committed
559
560
    void handleBlockSelection(int diff_row, int diff_col);

561
    // parentheses matcher
con's avatar
con committed
562
    void _q_matchParentheses();
563
    void _q_highlightBlocks();
con's avatar
con committed
564
    void slotSelectionChanged();
565
    void _q_animateUpdate(int position, QPointF lastPos, QRectF rect);
566
    void doFoo();
567

con's avatar
con committed
568
569
570
};


571
class TEXTEDITOR_EXPORT BaseTextEditorEditable : public ITextEditable
con's avatar
con committed
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
{
    Q_OBJECT
    friend class BaseTextEditor;
public:
    BaseTextEditorEditable(BaseTextEditor *editor);
    ~BaseTextEditorEditable();

    inline BaseTextEditor *editor() const { return e; }

    // EditorInterface
    inline QWidget *widget() { return e; }
    inline Core::IFile * file() { return e->file(); }
    inline bool createNew(const QString &contents) { return e->createNew(contents); }
    inline bool open(const QString &fileName = QString())
    {
        return e->open(fileName);
    }
    inline QString displayName() const { return e->displayName(); }
    inline void setDisplayName(const QString &title) { e->setDisplayName(title); }

    inline QByteArray saveState() const { return e->saveState(); }
    inline bool restoreState(const QByteArray &state) { return e->restoreState(state); }
con's avatar
con committed
594
    QWidget *toolBar();
con's avatar
con committed
595
596
597
598
599
600

    // ITextEditor
    int find(const QString &string) const;

    int currentLine() const;
    int currentColumn() const;
601
    void gotoLine(int line, int column = 0) { e->gotoLine(line, column); }
con's avatar
con committed
602
603
604
605
606
607
608
609
610
611
612
613
614

    inline int position(
        ITextEditor::PositionOperation posOp = ITextEditor::Current
        , int at = -1) const { return e->position(posOp, at); }
    inline void convertPosition(int pos, int *line, int *column) const { e->convertPosition(pos, line, column); }
    QRect cursorRect(int pos = -1) const;

    QString contents() const;
    QString selectedText() const;
    QString textAt(int pos, int length) const;
    inline QChar characterAt(int pos) const { return e->characterAt(pos); }

    inline void triggerCompletions() { e->triggerCompletions(); } // slot?
Roberto Raggi's avatar
Roberto Raggi committed
615
616
    inline void triggerQuickFix() { e->triggerQuickFix(); } // slot?

con's avatar
con committed
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
    inline ITextMarkable *markableInterface() { return e->markableInterface(); }

    void setContextHelpId(const QString &id) { m_contextHelpId = id; }
    QString contextHelpId() const; // from IContext

    inline void setTextCodec(QTextCodec *codec) { e->setTextCodec(codec); }
    inline QTextCodec *textCodec() const { return e->textCodec(); }


    // ITextEditable
    void remove(int length);
    void insert(const QString &string);
    void replace(int length, const QString &string);
    void setCurPos(int pos);
    void select(int toPos);

private slots:
    void updateCursorPosition();

private:
    BaseTextEditor *e;
    mutable QString m_contextHelpId;
    QToolBar *m_toolBar;
640
    Utils::LineColumnLabel *m_cursorPositionLabel;
con's avatar
con committed
641
642
643
644
645
};

} // namespace TextEditor

#endif // BASETEXTEDITOR_H