11 #include <QVBoxLayout>
45 QString newText =
exprTe->toPlainText();
49 exprTe->insertPlainText(newText);
73 setWindowTitle(tr(
"Expression Editor"));
74 setMinimumHeight(100);
77 auto *exprAndErrors =
new QVBoxLayout;
78 exprAndErrors->setMargin(0);
79 setLayout(exprAndErrors);
83 exprTe->setObjectName(QString::fromUtf8(
"exprTe"));
84 exprTe->setMinimumHeight(50);
102 exprAndErrors->addWidget(
exprTe, 4);
106 errorWidget->setObjectName(QString::fromUtf8(
"errorWidget"));
107 errorWidget->setSelectionMode(QAbstractItemView::SingleSelection);
108 errorWidget->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
132 disconnect(
controls, SIGNAL(insertString(
const QString &)));
140 connect(
controls, SIGNAL(insertString(
const QString &)), SLOT(
insertStr(
const QString &)));
147 QListWidgetItem *item =
errorWidget->item(selected);
148 int start = item->data(Qt::UserRole).toInt();
149 int end = item->data(Qt::UserRole + 1).toInt();
150 QTextCursor cursor =
exprTe->textCursor();
151 cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
152 cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, start);
153 cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, end - start + 1);
154 exprTe->setTextCursor(cursor);
189 return exprTe->toPlainText();
196 exprTe->insertPlainText(expression);
198 exprTe->moveCursor(QTextCursor::Start);
205 exprTe->moveCursor(QTextCursor::StartOfLine);
206 exprTe->insertPlainText(str);
216 int startLine, startCol;
220 QTextCursor cursor =
exprTe->textCursor();
221 cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
222 cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, startPos);
223 startLine = cursor.blockNumber();
224 startCol = cursor.columnNumber();
225 cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, endPos - startPos + 1);
226 QList<QTextEdit::ExtraSelection> extraSelections =
exprTe->extraSelections();
227 QTextEdit::ExtraSelection selection;
228 QColor lineColor = QColor(Qt::yellow).lighter(130);
229 selection.format.setUnderlineColor(lineColor);
230 selection.format.setUnderlineStyle(QTextCharFormat::UnderlineStyle::WaveUnderline);
231 selection.cursor = cursor;
232 extraSelections.append(selection);
233 exprTe->setExtraSelections(extraSelections);
235 QString message = tr(
"(%1, %2): %3").arg(startLine).arg(startCol).arg(error);
236 auto *item =
new QListWidgetItem(message,
errorWidget);
237 item->setData(Qt::UserRole, startPos);
238 item->setData(Qt::UserRole + 1, endPos);
252 exprTe->ensureCursorVisible();
265 QList<QTextEdit::ExtraSelection> extraSelections;
266 exprTe->setExtraSelections(extraSelections);
std::vector< QString > local_variables
void syncExtras(const ExprCompletionModel &otherModel)
void addVariable(const QString &str, const QString &comment)
void addFunction(const QString &, const QString &)
void updateText(int id, QString &text)
Request new text, given taking into account control id's new values.
bool rebuildControls(const QString &expressionText, std::vector< QString > &variables)
Rebuild the controls given the new expressionText. Return any local variables found.
ExprEditor(QWidget *parent)
ExprControlCollection * controlCollectionWidget() const
void registerExtraVariable(const QString &name, const QString &docString)
void insertStr(const QString &str)
void appendStr(const QString &str)
QListWidget * errorWidget
virtual void setControlCollectionWidget(ExprControlCollection *widget)
std::atomic< bool > _updatingText
void clearExtraCompleters()
ExprControlCollection * controls
void addError(int startPos, int endPos, const QString &error)
void setExpr(const QString &expression, bool apply=false)
void replaceExtras(const ExprCompletionModel &completer)
QTimer * controlRebuildTimer
void controlChanged(int id)
void registerExtraFunction(const QString &name, const QString &docString)
std::atomic< bool > _signaling
void textChanged(int id, const QString &text)
void textChangedCB(const QString &text)
ExprLineEdit(int id, QWidget *parent)
ExprCompletionModel * completionModel