-
Notifications
You must be signed in to change notification settings - Fork 84
/
JSRepl.h
96 lines (71 loc) · 1.69 KB
/
JSRepl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef JSREPL_H
#define JSREPL_H
#include <QWidget>
#include <QLineEdit>
#include <QJSValueList>
class QTextEdit;
class QLineEdit;
class QJSEngine;
class QKeyEvent;
class JSLineEdit;
class JSReplSearchBox;
class JSRepl : public QWidget
{
Q_OBJECT
public:
explicit JSRepl(QWidget *parent = nullptr) : JSRepl({}, parent) {};
JSRepl(QHash<QString, QObject *> objects, QWidget *parent = nullptr);
QSize sizeHint() const override;
public slots:
void execute();
void loadScript();
void appendLog(const QString &message, bool addBackground = false);
private:
void printResult(const QJSValue &value);
private slots:
void toggleSearchBox();
private:
QJSEngine *m_engine;
QTextEdit *m_textEdit;
JSLineEdit *m_lineEdit;
JSReplSearchBox *m_searchBox;
};
class JSLineEdit : public QLineEdit
{
Q_OBJECT
public:
JSLineEdit(QWidget *parent = nullptr);
void keyPressEvent(QKeyEvent *event) override;
private slots:
void onReturnPressed();
private:
QStringList history;
int currentIndex;
};
class JSPrintFunction : public QObject
{
Q_OBJECT
public:
JSPrintFunction(QTextEdit *textEdit, QObject *parent = nullptr);
public slots:
void print(QJSValue args);
signals:
void printRequested(const QString &message, bool background = false);
private:
QTextEdit *m_textEdit;
};
class JSReplSearchBox : public QWidget
{
Q_OBJECT
public:
JSReplSearchBox(QTextEdit *parentTextEdit, QWidget *parent = nullptr);
void setFocusOnLineEdit();
public slots:
void findNext();
void findPrevious();
private:
void highlight(const QTextCursor &cursor);
QTextEdit *textEdit;
QLineEdit *lineEdit;
};
#endif // JSREPL_H