From 8b93ec2eb288abcb2872d9508da5f1c4f27b2d6b Mon Sep 17 00:00:00 2001 From: B0cho Date: Wed, 16 Jul 2025 15:56:02 +0200 Subject: [PATCH] Core: Switch widget from 'ExpressionLineEdit' to 'ExpressionTextEdit' + minor dialog layout adjustments --- src/Gui/Dialogs/DlgExpressionInput.cpp | 27 +++++---------- src/Gui/Dialogs/DlgExpressionInput.h | 2 +- src/Gui/Dialogs/DlgExpressionInput.ui | 47 ++++++++++++++++++-------- src/Gui/ExpressionCompleter.cpp | 5 +++ src/Gui/ExpressionCompleter.h | 1 + 5 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/Gui/Dialogs/DlgExpressionInput.cpp b/src/Gui/Dialogs/DlgExpressionInput.cpp index 78c892f39b..a568f9d6d2 100644 --- a/src/Gui/Dialogs/DlgExpressionInput.cpp +++ b/src/Gui/Dialogs/DlgExpressionInput.cpp @@ -79,22 +79,22 @@ DlgExpressionInput::DlgExpressionInput(const App::ObjectIdentifier & _path, initializeVarSets(); // Connect signal(s) - connect(ui->expression, &ExpressionLineEdit::textChanged, + connect(ui->expression, &ExpressionTextEdit::textChanged, this, &DlgExpressionInput::textChanged); connect(discardBtn, &QPushButton::clicked, this, &DlgExpressionInput::setDiscarded); if (expression) { - ui->expression->setText(QString::fromStdString(expression->toString())); + ui->expression->setPlainText(QString::fromStdString(expression->toString())); } else { QVariant text = parent->property("text"); if (text.canConvert()) { - ui->expression->setText(text.toString()); + ui->expression->setPlainText(text.toString()); } } - // Set document object on line edit to create auto completer + // Set document object on text edit to create auto completer DocumentObject * docObj = path.getDocumentObject(); ui->expression->setDocumentObject(docObj); @@ -114,7 +114,7 @@ DlgExpressionInput::DlgExpressionInput(const App::ObjectIdentifier & _path, setAttribute(Qt::WA_TranslucentBackground, true); } else { - ui->expression->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + ui->expression->setMinimumHeight(50); ui->horizontalSpacer_3->changeSize(0, 2); ui->verticalLayout->setContentsMargins(9, 9, 9, 9); this->adjustSize(); @@ -360,8 +360,10 @@ void DlgExpressionInput::checkExpression(const QString& text) static const bool NoCheckExpr = false; -void DlgExpressionInput::textChanged(const QString &text) +void DlgExpressionInput::textChanged() { + const QString& text = ui->expression->toPlainText(); + if (text.isEmpty()) { okBtn->setDisabled(true); discardBtn->setDefault(true); @@ -371,17 +373,6 @@ void DlgExpressionInput::textChanged(const QString &text) okBtn->setDefault(true); try { - //resize the input field according to text size - QFontMetrics fm(ui->expression->font()); - int width = QtTools::horizontalAdvance(fm, text) + 15; - if (width < minimumWidth) - ui->expression->setMinimumWidth(minimumWidth); - else - ui->expression->setMinimumWidth(width); - - if(this->width() < ui->expression->minimumWidth()) - setMinimumWidth(ui->expression->minimumWidth()); - checkExpression(text); if (varSetsVisible) { // If varsets are visible, check whether the varset info also @@ -917,7 +908,7 @@ void DlgExpressionInput::updateVarSetInfo(bool checkExpr) if (checkExpr) { // We have to check the text of the expression as well try { - checkExpression(ui->expression->text()); + checkExpression(ui->expression->toPlainText()); } catch (Base::Exception&) { okBtn->setEnabled(false); diff --git a/src/Gui/Dialogs/DlgExpressionInput.h b/src/Gui/Dialogs/DlgExpressionInput.h index ce62aa2d95..90b6c1760a 100644 --- a/src/Gui/Dialogs/DlgExpressionInput.h +++ b/src/Gui/Dialogs/DlgExpressionInput.h @@ -111,7 +111,7 @@ private: QString& message) const; private Q_SLOTS: - void textChanged(const QString & text); + void textChanged(); void setDiscarded(); void onCheckVarSets(int state); void onVarSetSelected(int index); diff --git a/src/Gui/Dialogs/DlgExpressionInput.ui b/src/Gui/Dialogs/DlgExpressionInput.ui index 8736c83604..3d5dc2f374 100644 --- a/src/Gui/Dialogs/DlgExpressionInput.ui +++ b/src/Gui/Dialogs/DlgExpressionInput.ui @@ -143,9 +143,9 @@ - + - + 0 0 @@ -312,24 +312,41 @@ - - - - 0 - 0 - - - - QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Reset - - + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + + 0 + 0 + + + + QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Reset + + + + - Gui::ExpressionLineEdit - QLineEdit + Gui::ExpressionTextEdit + QTextEdit
ExpressionCompleter.h
diff --git a/src/Gui/ExpressionCompleter.cpp b/src/Gui/ExpressionCompleter.cpp index 6f3dc29f50..ee206c8ff9 100644 --- a/src/Gui/ExpressionCompleter.cpp +++ b/src/Gui/ExpressionCompleter.cpp @@ -1085,6 +1085,11 @@ void ExpressionTextEdit::setExactMatch(bool enabled) } } +QSize ExpressionTextEdit::sizeHint() const +{ + return QSize(200, 30); +} + void ExpressionTextEdit::setDocumentObject(const App::DocumentObject* currentDocObj) { if (completer) { diff --git a/src/Gui/ExpressionCompleter.h b/src/Gui/ExpressionCompleter.h index cf7f5f20c9..af29fe4396 100644 --- a/src/Gui/ExpressionCompleter.h +++ b/src/Gui/ExpressionCompleter.h @@ -130,6 +130,7 @@ public: bool completerActive() const; void hideCompleter(); void setExactMatch(bool enabled=true); + QSize sizeHint() const override; protected: void keyPressEvent(QKeyEvent * event) override; void contextMenuEvent(QContextMenuEvent * event) override;