diff --git a/src/UI/ScriptViews/ScriptEditor.cc b/src/UI/ScriptViews/ScriptEditor.cc index 9b6bb6f87f2e7d08dbefb7ca72bbbf1be1bed171..5f9d7f5905e8af4da4f2bbbb561818180d15023e 100644 --- a/src/UI/ScriptViews/ScriptEditor.cc +++ b/src/UI/ScriptViews/ScriptEditor.cc @@ -3,10 +3,11 @@ #include <QTextCursor> #include <QBrush> +#include <QKeyEvent> using namespace Vivy; -ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor) +ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor) noexcept : QWidget(editor) , scriptEditor(editor) { @@ -24,7 +25,7 @@ ScriptEditor::LineNumberArea::paintEvent(QPaintEvent *event) noexcept scriptEditor->lineNumberAreaPaintEvent(event); } -ScriptEditor::ScriptEditor(QWidget *parent) +ScriptEditor::ScriptEditor(QWidget *parent) noexcept : QPlainTextEdit(parent) { setStyleSheet(QStringLiteral("* { font-family: \"FiraCode\"; font-size: 10pt}")); @@ -36,8 +37,22 @@ ScriptEditor::ScriptEditor(QWidget *parent) updateLineNumberAreaWidth(0); } +void +ScriptEditor::keyPressEvent(QKeyEvent *e) noexcept +{ + if (e->key() == Qt::Key_Tab) { + QTextCursor cursor = textCursor(); + cursor.insertText(" "); + e->accept(); + } + + else { + QPlainTextEdit::keyPressEvent(e); + } +} + int -ScriptEditor::lineNumberAreaWidth() +ScriptEditor::lineNumberAreaWidth() noexcept { int digits = 1; int max = qMax(1, blockCount()); @@ -53,13 +68,13 @@ ScriptEditor::lineNumberAreaWidth() } void -ScriptEditor::updateLineNumberAreaWidth([[maybe_unused]] int newBlockCount) +ScriptEditor::updateLineNumberAreaWidth([[maybe_unused]] int newBlockCount) noexcept { setViewportMargins(lineNumberAreaWidth(), 0, 0, 0); } void -ScriptEditor::updateLineNumberArea(const QRect &rect, int dy) +ScriptEditor::updateLineNumberArea(const QRect &rect, int dy) noexcept { if (dy) lineNumberArea->scroll(0, dy); @@ -71,7 +86,7 @@ ScriptEditor::updateLineNumberArea(const QRect &rect, int dy) } void -ScriptEditor::resizeEvent(QResizeEvent *e) +ScriptEditor::resizeEvent(QResizeEvent *e) noexcept { QPlainTextEdit::resizeEvent(e); const QRect cr = contentsRect(); @@ -79,7 +94,7 @@ ScriptEditor::resizeEvent(QResizeEvent *e) } void -ScriptEditor::lineNumberAreaPaintEvent(QPaintEvent *event) +ScriptEditor::lineNumberAreaPaintEvent(QPaintEvent *event) noexcept { QPainter painter(lineNumberArea); painter.fillRect(event->rect(), QColor::fromRgb(69, 83, 100)); diff --git a/src/UI/ScriptViews/ScriptEditor.hh b/src/UI/ScriptViews/ScriptEditor.hh index ecb5738ecb788acfad75ca8d10f1164a310dd2eb..076e51fc136dc83f80813f5af2ab8c154b48fbc8 100644 --- a/src/UI/ScriptViews/ScriptEditor.hh +++ b/src/UI/ScriptViews/ScriptEditor.hh @@ -17,7 +17,7 @@ class ScriptEditor final : public QPlainTextEdit { class LineNumberArea final : public QWidget { VIVY_UNMOVABLE_OBJECT(LineNumberArea) public: - LineNumberArea(ScriptEditor *editor); + LineNumberArea(ScriptEditor *editor) noexcept; QSize sizeHint() const noexcept override; @@ -25,23 +25,24 @@ class ScriptEditor final : public QPlainTextEdit { void paintEvent(QPaintEvent *event) noexcept override; private: - ScriptEditor *scriptEditor; + ScriptEditor *scriptEditor{ nullptr }; }; public: - ScriptEditor(QWidget *parent = nullptr); + ScriptEditor(QWidget *parent) noexcept; - void lineNumberAreaPaintEvent(QPaintEvent *event); - int lineNumberAreaWidth(); + void lineNumberAreaPaintEvent(QPaintEvent *event) noexcept; + int lineNumberAreaWidth() noexcept; protected: - void resizeEvent(QResizeEvent *event) override; + void resizeEvent(QResizeEvent *event) noexcept override; + void keyPressEvent(QKeyEvent *e) noexcept override; private slots: - void updateLineNumberAreaWidth(int newBlockCount); - void updateLineNumberArea(const QRect &rect, int dy); + void updateLineNumberAreaWidth(int newBlockCount) noexcept; + void updateLineNumberArea(const QRect &rect, int dy) noexcept; private: - QWidget *lineNumberArea; + QWidget *lineNumberArea{ nullptr }; }; }