0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 00:33:02 +03:00
LimeReport/limereport/scripteditor/lrcodeeditor.h
Андрей Лухнов 0fca7169d3 Define code style and format all source file using clang-format-14
except those placed in 3rdparty directories.
2024-09-19 21:09:38 +03:00

69 lines
1.9 KiB
C++

#ifndef LRCODEEDITOR_H
#define LRCODEEDITOR_H
#include "lrscripthighlighter.h"
#include <QPlainTextEdit>
#include <QSyntaxHighlighter>
QT_BEGIN_NAMESPACE
class QWidget;
class QCompleter;
class QKeyEvent;
class QScrollBar;
QT_END_NAMESPACE
namespace LimeReport {
class CodeEditor: public QPlainTextEdit {
Q_OBJECT
public:
CodeEditor(QWidget* parent = 0);
void setCompleter(QCompleter* value);
QCompleter* compleater() const { return m_completer; }
void lineNumberAreaPaintEvent(QPaintEvent* event);
int lineNumberAreaWidth();
protected:
void keyPressEvent(QKeyEvent* e);
void focusInEvent(QFocusEvent* e);
void resizeEvent(QResizeEvent* event);
private:
QString textUnderCursor() const;
bool matchLeftParenthesis(QTextBlock currentBlock, QChar parenthesisType, int i,
int numLeftParentheses);
bool matchRightParenthesis(QTextBlock currentBlock, QChar parenthesisType, int i,
int numRightParentheses);
void createParenthesisSelection(int pos);
bool charIsParenthesis(QChar character, ParenthesisType type);
QChar getParenthesisReverceChar(QChar parenthesisChar);
private slots:
void insertCompletion(const QString& completion);
void updateLineNumberAreaWidth(int newBlockCount);
void highlightCurrentLine();
void updateLineNumberArea(const QRect& rect, int dy);
void matchParentheses();
private:
QCompleter* m_completer;
QWidget* lineNumberArea;
};
class LineNumberArea: public QWidget {
public:
LineNumberArea(CodeEditor* editor): QWidget(editor) { codeEditor = editor; }
QSize sizeHint() const { return QSize(codeEditor->lineNumberAreaWidth(), 0); }
protected:
void paintEvent(QPaintEvent* event) { codeEditor->lineNumberAreaPaintEvent(event); }
private:
CodeEditor* codeEditor;
};
} // namespace LimeReport
#endif // LRCODEEDITOR_H