SWMMVis  6.0.0-alpha.4
Qt6/C++ GIS-based graphical user interface for the SWMMVis engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
reactionexpressionedit.h
Go to the documentation of this file.
1
19#ifndef OPENSWMMVIS_UI_REACTIONEXPRESSIONEDIT_H
20#define OPENSWMMVIS_UI_REACTIONEXPRESSIONEDIT_H
21
22#include <QPalette>
23#include <QSet>
24#include <QStringList>
25#include <QStyledItemDelegate>
26#include <QSyntaxHighlighter>
27#include <QTextCharFormat>
28#include <QTextEdit>
29
30class QCompleter;
31
32namespace openswmmvis::ui {
33
36class ReactionSyntaxHighlighter : public QSyntaxHighlighter
37{
38 Q_OBJECT
39
40public:
41 explicit ReactionSyntaxHighlighter(QTextDocument *doc);
42
44 static QStringList hydVarNames();
45 static QStringList functionNames();
46
49 void setModelIdentifiers(const QSet<QString> &names);
50
51 void setPalette(const QPalette &palette);
52
53protected:
54 void highlightBlock(const QString &text) override;
55
56private:
57 void rebuildFormats_();
58
59 QPalette m_palette;
60 QSet<QString> m_modelIdents;
61 QTextCharFormat m_fmtVariable;
62 QTextCharFormat m_fmtModelIdent;
63 QTextCharFormat m_fmtFunction;
64 QTextCharFormat m_fmtOperator;
65 QTextCharFormat m_fmtNumber;
66 QTextCharFormat m_fmtUnknown;
67};
68
72class ReactionExpressionEdit : public QTextEdit
73{
74 Q_OBJECT
75
76public:
78 explicit ReactionExpressionEdit(void *engineHandle, int scope,
79 QWidget *parent = nullptr);
80
81 [[nodiscard]] QString expression() const { return toPlainText(); }
82 void setExpression(const QString &text);
83
86 void refreshVocabulary();
87
89 void validateNow();
90
91signals:
92 void validationChanged(bool ok, const QString &msg, int col);
94
95protected:
96 void keyPressEvent(QKeyEvent *e) override;
97 void focusInEvent(QFocusEvent *e) override;
98
99private:
100 void showCompleter_(const QString &prefix);
101 void insertCompletion_(const QString &completion);
102 [[nodiscard]] QString textUnderCursor_() const;
103
104 void *m_engine = nullptr;
105 int m_scope = 1; // SWMM_RXN_SCOPE_PIPE
106 ReactionSyntaxHighlighter *m_highlighter = nullptr;
107 QCompleter *m_completer = nullptr;
108 class QTimer *m_debounce = nullptr;
109};
110
114class ReactionExpressionDelegate : public QStyledItemDelegate
115{
116 Q_OBJECT
117
118public:
120 static constexpr int ScopeRole = 0x0100 + 77;
121
122 explicit ReactionExpressionDelegate(void *engineHandle, int defaultScope,
123 QObject *parent = nullptr);
124
125 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
126 const QModelIndex &index) const override;
127 void setEditorData(QWidget *editor, const QModelIndex &index) const override;
128 void setModelData(QWidget *editor, QAbstractItemModel *model,
129 const QModelIndex &index) const override;
130
131signals:
132 void validationChanged(bool ok, const QString &msg, int col) const;
133
134private:
135 void *m_engine = nullptr;
136 int m_defaultScope = 1;
137};
138
139} // namespace openswmmvis::ui
140
141#endif // OPENSWMMVIS_UI_REACTIONEXPRESSIONEDIT_H
Definition reactionexpressionedit.h:115
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition reactionexpressionedit.cpp:380
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
Definition reactionexpressionedit.cpp:408
static constexpr int ScopeRole
Model data role carrying the cell's SWMM_RXN_SCOPE_* (int).
Definition reactionexpressionedit.h:120
void setEditorData(QWidget *editor, const QModelIndex &index) const override
Definition reactionexpressionedit.cpp:398
void validationChanged(bool ok, const QString &msg, int col) const
Definition reactionexpressionedit.h:73
QString expression() const
Definition reactionexpressionedit.h:81
void keyPressEvent(QKeyEvent *e) override
Definition reactionexpressionedit.cpp:324
void focusInEvent(QFocusEvent *e) override
Definition reactionexpressionedit.cpp:318
void validateNow()
Definition reactionexpressionedit.cpp:277
void refreshVocabulary()
Definition reactionexpressionedit.cpp:258
void editingFinished()
Enter/Return pressed (single-line commit)
void setExpression(const QString &text)
Definition reactionexpressionedit.cpp:271
void validationChanged(bool ok, const QString &msg, int col)
Definition reactionexpressionedit.h:37
static QStringList functionNames()
Definition reactionexpressionedit.cpp:37
void setModelIdentifiers(const QSet< QString > &names)
Definition reactionexpressionedit.cpp:56
void setPalette(const QPalette &palette)
Definition reactionexpressionedit.cpp:62
void highlightBlock(const QString &text) override
Definition reactionexpressionedit.cpp:107
static QStringList hydVarNames()
Static vocabulary from the compiler's own tables (engine-less).
Definition reactionexpressionedit.cpp:25
int e
Definition inpmeshreader.cpp:41
bool ok
Definition inpmeshwriter.cpp:575
int index
Position in m_quadRegions / m_quadReports.
Definition meshgenerator.cpp:153
Definition openswmmvislayer.h:43
QVector< int > parent
union-find
Definition pslgminsize.cpp:176
QString text
Definition queryparser.cpp:35