27 const int line_number_gap = 4;
34 connect(
this, &ImportTextView::blockCountChanged,
this,
37 connect(
this, &ImportTextView::cursorPositionChanged,
this,
44 setWordWrapMode(QTextOption::NoWrap);
52 int max = qMax(1, blockCount());
58 int space = line_number_gap * 2 + fontMetrics().horizontalAdvance(QLatin1Char(
'9')) * digits;
75 if (rect.contains(viewport()->rect()))
81 QPlainTextEdit::resizeEvent(e);
83 QRect cr = contentsRect();
89 QList<QTextEdit::ExtraSelection> extraSelections;
92 QTextEdit::ExtraSelection selection;
94 QColor lineColor = QColor(Qt::yellow).lighter(160);
96 selection.format.setBackground(lineColor);
97 selection.format.setProperty(QTextFormat::FullWidthSelection,
true);
98 selection.cursor = textCursor();
99 selection.cursor.clearSelection();
100 extraSelections.append(selection);
103 setExtraSelections(extraSelections);
109 painter.fillRect(event->rect(), Qt::lightGray);
111 QTextBlock block = firstVisibleBlock();
112 int blockNumber = block.blockNumber();
113 int top = qRound(blockBoundingGeometry(block).translated(contentOffset()).top());
114 int bottom = top + qRound(blockBoundingRect(block).height());
116 while (block.isValid() && top <= event->rect().bottom()) {
117 if (block.isVisible() && bottom >= event->rect().top()) {
118 QString number = QString::number(blockNumber + 1);
119 painter.setPen(Qt::black);
120 painter.drawText(0, top,
lineNumberArea->width() - line_number_gap,
121 fontMetrics().height(), Qt::AlignRight, number);
124 block = block.next();
126 bottom = top + qRound(blockBoundingRect(block).height());
void updateLineNumberArea(const QRect &rect, int dy)
ImportTextView(QWidget *parent=nullptr)
void highlightCurrentLine()
void lineNumberAreaPaintEvent(QPaintEvent *event)
void resizeEvent(QResizeEvent *event) override
void updateLineNumberAreaWidth(int newBlockCount)
int lineNumberAreaWidth()
MVVM_VIEW_EXPORT int SystemPointSize()
Returns size in points of default system font.
Based on Qt example "codeeditor" Copyright (C) 2016 The Qt Company Ltd.